2010-11-29 7 views
1

Da meine Aussagen wiePrevent Injektion SQL mit PHP

sind
"SELECT * FROM `box` WHERE `thing` = '{$variable}' 

Könnte ich reinigen, dass mit einfach

$variable = str_replace("'","\'",$variable); 
"SELECT * FROM `box` WHERE `thing` = '{$variable}' 

würde das funktionieren? Mein Host unterstützt mysql escape nicht und ich verwende nicht mysqli.

+0

Gibt es einen bestimmten Grund, warum Sie nicht mysqli verwenden? – GolezTrol

+0

Ist das ok \t statische Funktion sauber (& $ x) \t { \t \t $ x = str_replace ('\' '' '‘, htmlspecialchars ($ x)); \t \t zurückgeben $ x; \t} – Macmee

+0

Go PDO - http://Stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons - http://stackoverflow.com/questions/770782/moving -from-mysql-zu-mysqli-or-pdo –

Antwort

-8

Je nachdem, welche Klassen als gültige Datentyp für Ihre Anfrage, können Sie in der Regel weg mit:

function cleanVar($str){ 
    $str = strip_tags(addslashes($str)); 
    return $str; 
} 
+2

[Lesen Sie, warum addslashes keine ausreichende Sicherheit gegen SQL-Injektion bietet] (http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string) – Blaise

6

Ich bezweifle stark, dass Ihr Host die mysql_real_escape_string Funktion nicht unterstützt.

$variable = mysql_real_escape_string($variable); 

$sql = "SELECT * FROM `box` WHERE `thing` = '{$variable}'"; 

Wenn in der Tat nicht wahr haben MySQL installiert haben, dann können Sie eine der folgenden Escape-Funktionen verwenden, auf dessen Basis RDBMS Sie verwenden:

pg_escape_string

sqlite_escape_string

db2_escape_string

ingres_escape_string

+0

Ich würde vorschlagen, Rat über addslashes zu entfernen. Es ist unsicher und 'mysql_real_escape_string' ist immer verfügbar, wenn' mysql' Erweiterung installiert ist (ja, ich weiß, dass es in 'disable_functions' sein kann, aber es ist albern). – zerkms

+0

@zerkms Danke! Erledigt. –

0

Wenn es Postgres ist können Sie pg_escape_string verwenden.