Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP - Anti SQL Injection Hack
donkamilo56
05.06.2010, 18:04
hallo zusammen kann mir einer sagen was dran falsch ist?
// Ajout des protections injection SQL
$x = str_replace("'", ''', $x);
$x = str_replace("--", '--', $x);
$x = str_replace("UPDATE", '', $x);
$x = str_replace("DELETE", '', $x);
$x = str_replace("DROP", '', $x);
$x = str_replace("INSERT", '', $x);
$x = str_replace("$mysql_", '', $x);
$x = str_replace("java script:", ', $x);
// Ajout des protections injection SQL
Ich habe das irgendwo gefunden ich weiß nicht was die variable x soll, bissi komisch und mysql als ne variable nehmen? hmm. Kann mir das vielleicht Einer richtig schreiben? es soll eine sql injection verhindern und die seite in ein U-Boot fahren danke schon mal
th3flood
05.06.2010, 18:10
Prepared Statements ( Prepared Statement – Wikipedia (http://de.wikipedia.org/wiki/Prepared_Statement) ) zu nutzen hilft da eher, würde ich sagen
<?php
//$x = mysql_real_escape_string($x);
//$x = str_replace("/", "", $x);
$x = str_replace("'", "", $x);
$x = str_replace("--", '--', $x);
$x = str_replace("UPDATE", '', $x);
$x = str_replace("DELETE", '', $x);
$x = str_replace("DROP", '', $x);
$x = str_replace("INSERT", '', $x);
$x = str_replace("$mysql_", '', $x);
$x = str_replace("java script:", "", $x);
?>
$x = dein string, den du via mysql query ausführen willst
Die auskommentierte Zeilen würde ich dir empfehlen ;)
MfG
Also meinen SQL Befehl würde ich da nicht durchschicken ^^
Das ist eine Escape funktion..
Bzw man könnte eine draus machen..
<?php
function escape($x) {
$x = mysql_real_escape_string($x);
$x = str_replace("/", "", $x);
$x = str_replace("'", "", $x);
$x = str_replace("--", '--', $x);
$x = str_replace("UPDATE", '', $x);
$x = str_replace("DELETE", '', $x);
$x = str_replace("DROP", '', $x);
$x = str_replace("INSERT", '', $x);
$x = str_replace("$mysql_", '', $x);
$x = str_replace("java script:", "", $x);
return $x;
}
$input = escape($_POST['iwas']);
mysql_db_query('SELECT * FROM table WHERE spalte="'.$input.'"');
?>
MfG
sfx
Also meinen SQL Befehl würde ich da nicht durchschicken ^^Was für einen denn?
blackberry
05.06.2010, 18:49
Ich würde damit sowieso nichts "sichern".
str_replace ist Case-Sensitiv - d.h. du gibst statt INSERT insert ein und schon ist der Filter umgangen.
Zudem gilt: von Anfang an richtig sauber programmieren/skripten, dann braucht man sich nicht auf solche Filter verlassen (die sowieso 1. ineffizient und 2. störend sind - stellt euch mal vor ihr schreibt ein Forum, und haut so eine Funktion über alle eure $_REQUEST-Elemente... so eine Konversation wäre dann nicht möglich, weil allein schon niemand mehr "INSERT" schreiben könnte).
donkamilo56
05.06.2010, 18:51
Also meinen SQL Befehl würde ich da nicht durchschicken ^^
Das ist eine Escape funktion..
Bzw man könnte eine draus machen..
<?php
function escape($x) {
$x = mysql_real_escape_string($x);
$x = str_replace("/", "", $x);
$x = str_replace("'", "", $x);
$x = str_replace("--", '--', $x);
$x = str_replace("UPDATE", '', $x);
$x = str_replace("DELETE", '', $x);
$x = str_replace("DROP", '', $x);
$x = str_replace("INSERT", '', $x);
$x = str_replace("$mysql_", '', $x);
$x = str_replace("java script:", "", $x);
return $x;
}
$input = escape($_POST['iwas']);
mysql_db_query('SELECT * FROM table WHERE spalte="'.$input.'"');
?>
MfG
sfx
danke dir und funktioniert das wirklich so weil da
$x = str_replace("'", ''', $x); kommt ein syntax fehler und hier auch
$x = str_replace("java script:", ', $x);
-SFX- ich meinte eher wie dein 1337 SQL-Befehl aussehen würde, das man den dort nicht durch schicken sollte.
Vielleicht habe ich dich aber auch nur falsch verstanden...
GregorSamsa
05.06.2010, 19:22
Größter Müll den ich je gesehen habe!
$x = str_replace("--", '--', $x);
Einfacher kann man auch schreiben:
$x = $x;
Das Ding schütz vor _garnichts_ - nichteinmal Ansatzweise.
Entweder Prepared Statements oder einfach sauber Programmieren...
danke dir und funktioniert das wirklich so weil da
$x = str_replace("'", ''', $x); kommt ein syntax fehler und hier auch
$x = str_replace("java script:", ', $x);
tut mir leid, ich hab mir das nicht genau durchgelesen
$x = str_replace("'", '\\\'', $x);
$x = str_replace("java script:", '', $x);
Aber wie meine Vorposter schon gesagt haben, gute Programmierung kann man damit nicht ersetzen
blackberry
05.06.2010, 20:27
Gut wir fassen zusammen:
Die Frage was an dem Script falsch ist lässt sich wohl in zwei Punkten beantworten:
1. die Syntax
2. die Tatsache, dass es vor nichts schützt.
Insofern...
/closed
Powered by vBulletin® Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.