URL: https://www.overclockers.at/coding-stuff/sicherheitsfrage_bei_php_mysql_71399/page_1 - zur Vollversion wechseln!
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
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 '%
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
doch, denn auch die gefährlichen einfachen anführungszeichen ' werden gegen unschädliche \' ausgetauscht.
ahh, gut
thx
MIK
Zitat von atrox//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 '%
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(...)Zitat von atroxeine 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.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025