"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Sicherheitsfrage bei php/mysql

kleinerChemiker 16.03.2003 - 17:06 1782 7 Thread rating
Posts

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
doch, denn auch die gefährlichen einfachen anführungszeichen ' werden gegen unschädliche \' ausgetauscht.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
ahh, gut
thx

MIK

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
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 '%

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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von atrox
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(...) :D

aber du hast recht, die meisten sind echt kipferln, ich kenn sogar ne seite (welche ich nicht näher nennen möchte... :p ) wo man sich einfach mit index.php?login=true anmelden konnte :rolleyes:
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz