kleinerChemiker
Here to stay
|
folgendes: ich bekomme über die url diverse variablen. teile davon werden dann in einem sql-query verwendet. z.b. "SELECT * FROM xyz WHERE id=$id". wenn $id eine zahl sein muß, dann kann ich das überprüen und jeden text ausschließen. was jedoch, wenn die variable ein text ist? dann könnte jemand doch auch text eingeben, der die (den? das?) verändert. z.b. wenn $id in der url auf "a AND id2=b" verändert wird. dann wird aus der geplanten query "SELECT * FROM xyz WHERE id=a" folgende query "SELECT * FROM xyz WHERE id=a AND id2=b". dieses beispiel ist zwar harmlos, aber man könnte ja in anderen querys (UPDATE, INSERT) durchaus destruktive funktionen einbauen.
wie kann ich nun verhindern, daß der text ausgeführt wird, sondern bei einer insert anweisung komplett in ein textfeld geschrieben wird?
thx
MIK
|
atrox
in fairy dust... I trust!
|
in der tat ein häufiger fehler, den viele programmierer zt. auch nicht bereit sind einzusehen - auch bei einigen grossen sites noch vorhanden. datenbanktreiber beiten daher entweder variable-binding an, oder funktionen zum codieren des strings an, so daß keine meta-charachter vorkommen. für mysql ist das zb mysql_escape_string ()wenn man diese funktion oft benutzt, wird man vermutlich eine wrapper-funktion mir kürzerem namen anlegen. //edit: wenn du weißt das der parameter einer bestimmten konvention unterliegen soll, kannst du es im vorfeld abprüfen (zb is_numeric()). //edit2: habe schon bei websites gesehen, wo man queries wie select * from user where username='$user' and password='$password' mit folgendem $password anmelden konnte: ' OR password LIKE '%
Bearbeitet von atrox am 16.03.2003, 18:32
|
kleinerChemiker
Here to stay
|
genau dieses edit 2 meine ich aber wenn ich die info bei mysql_escape_string() richtig verstehe, werden doch nur sonderchars mittels \ maskiert. aber genau dieses edit2 würde da doch nciht abgesichert werden. MIK
|
atrox
in fairy dust... I trust!
|
doch, denn auch die gefährlichen einfachen anführungszeichen ' werden gegen unschädliche \' ausgetauscht.
|
kleinerChemiker
Here to stay
|
ahh, gut thx
MIK
|
Maehmann
OC Addicted
|
//edit2: habe schon bei websites gesehen, wo man queries wie select * from user where username='$user' and password='$password' mit folgendem $password anmelden konnte: ' OR password LIKE '% Kann ich nicht einfach ein Query wie "select pw from user where username ='$user' machen dann eine if abfrage in der beide passwörter verglichen werden? Da brauch ich mir imho keine Gedanken über bösartige Eingaben machen, oder? Nicht schlagen wenns falsch ist =)
Bearbeitet von Maehmann am 17.03.2003, 00:59
|
atrox
in fairy dust... I trust!
|
eine dynamische website wird noch aus jede menge anderer sql-abfragen bestehen, wo es ganz unerwünscht sein kann, daß der user die abfragen nach seinen wünschen ändert.
in deinem beispiel könnte der user mit ' or password=='test gezielt den user unter tausenden heraussuchen der dummerweise 'test' als passwort hat.
|
watchout
Legendundead
|
eine dynamische website wird noch aus jede menge anderer sql-abfragen bestehen, wo es ganz unerwünscht sein kann, daß der user die abfragen nach seinen wünschen ändert.
in deinem beispiel könnte der user mit ' or password=='test gezielt den user unter tausenden heraussuchen der dummerweise 'test' als passwort hat. der kluge mann verwendet bei diversen usereingaben preg_match(...) aber du hast recht, die meisten sind echt kipferln, ich kenn sogar ne seite (welche ich nicht näher nennen möchte... ) wo man sich einfach mit index.php?login=true anmelden konnte
|