PDA

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

sn0w
05.06.2010, 18:12
<?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

SFX
05.06.2010, 18:35
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

0x30
05.06.2010, 18:37
Also meinen SQL Befehl würde ich da nicht durchschicken ^^Was für einen denn?

SFX
05.06.2010, 18:41
Userinput :P

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);

0x30
05.06.2010, 19:11
-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...

SFX
05.06.2010, 20:26
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