SQL Injection

10/08/2012 16:15 dercoder#1
Hey,

ich hab letztens mein Forum durch eine sqlinjection aufgeben können... ganze liste mit user & pwds wurde online gestellt -zum glück "nur" 51 ...

da ich dies jetzt verhindern will wollt ich meie homepage testen...

so sieht meine abfrage aus (im quellcode):

Quote:
SELECT * FROM Benutzer WHERE User = $User AND Pwd= $Pwd
Wenn ich nun aber versuche dies zu 'Hacken' mit:

Quote:
localhost/user=' OR 1=1
dann funktioniert es nicht, da ja die pwd abfrage noch den fuß in der tür hat.

aber wie kann ich nun das ganze vervollständigen ?

mfg
10/08/2012 16:17 NotEnoughForYou#2
indem du den Rest des Querys auskommentierst. Wenn man aber $User und $Pwd entsprechend filtert kommt es erst gar nicht zu einer Sqlinjection.
10/08/2012 16:48 BlackTrader#3
Prepared Statement
ansonsten mysql_real_escape_string

passwörter als sha256 + salt speichern
das mit den emails ist immer so ne sache... am besten garnicht verlangen

sicherheit geht vor
10/08/2012 16:49 PseudoPsycho#4
Code:
SELECT * FROM Benutzer WHERE User = $User AND Pwd= $Pwd
Sowas macht man auch nicht mehr. Wegen sowas gibt es ja moderne Techniken wie MySQLi. Besser wäre so:
PHP Code:
$db=new mysqli('localhost''user''pass''database');
// ...
$get=$db->prepare('SELECT `id`, `User`, `Pwd`, `etc` FROM `Benutzer` WHERE `User=? AND `Pwd`=? LIMIT 1');
$get->bind_param('ss'$db->real_escape_string($User), $db->real_escape_string($Pwd));
// ... 
Edit: BlackTrader ist mir wohl zuvorgekommen. ;)
10/10/2012 22:51 JacK le chilla#5
"real_escape_string" ? heißt doch. mysql_real_escape_string
10/10/2012 22:56 NotEnoughForYou#6
Quote:
Originally Posted by JacK le chilla View Post
"real_escape_string" ? heißt doch. mysql_real_escape_string
das ist die Methode von mysqli ....
10/11/2012 09:11 boxxiebabee#7
Quote:
Originally Posted by NotEnoughForYou View Post
das ist die Methode von mysqli ....
Ne, für mysqli ist es:
mysqli_real_escape_string

real_escape_string gibt es nicht.
10/11/2012 10:43 マルコ#8
Sagt mal, meint ihr das alle jetzt ernst??? Seid ihr eigentlich alle blind oder stellt ihr euch nur doof?^^

Da steht doch

$db = new mysqli(/*..*/);
$db->real_escape_string(/*..*/);

real_escape_string gibt es und es ist die MySQLi Funktion im OO Ansatz.
10/11/2012 14:53 NotEnoughForYou#9
Quote:
Originally Posted by マルコ View Post
Sagt mal, meint ihr das alle jetzt ernst??? Seid ihr eigentlich alle blind oder stellt ihr euch nur doof?^^

Da steht doch

$db = new mysqli(/*..*/);
$db->real_escape_string(/*..*/);

real_escape_string gibt es und es ist die MySQLi Funktion im OO Ansatz.
Eben ...
10/12/2012 13:54 $ѕтяιηg_тσ_єѕcαρє#10
Wer sagt das real_escape_string nicht gibt kann mal gar nix ... wenn ihr nichts wisst würde ich mal auf php.net nachsehen :facepalm:

[Only registered and activated users can see links. Click Here To Register...]
10/12/2012 14:12 PseudoPsycho#11
Quote:
Originally Posted by $ѕтяιηg_тσ_єѕcαρє View Post
Wer sagt das real_escape_string nicht gibt kann mal gar nix ...
Durchaus möglich, dass die sich auch einfach verlesen haben.
Die Funktion real_escape_string() gibt es ja so auch nicht.
Spätestens bei dem Kommentar
Quote:
Originally Posted by NotEnoughForYou
das ist die Methode von mysqli ....
und einem flüchtigen Blick nach oben hätte das aber klar sein sollen ;)