2010-04-29 16 views
10

Ho sempre letto che le virgolette non fermano affatto le iniezioni SQL ma non riesco a capire perché no! Per fare un esempio, diciamo che abbiamo la seguente query:SQL Injection riuscito nonostante le citazioni Magic di PHP

SELECT * FROM tablename 
    WHERE email='$x'; 

Ora, se l'input dell'utente rende $x=' OR 1=1 --, la query sarebbe:

SELECT * FROM tablename 
    WHERE email='\' OR 1=1 --'; 

La barra inversa verrà aggiunto da Magic Quotes senza danno fatto di sorta!

C'è un modo in cui non vedo dove l'utente può ignorare gli inserimenti di Virgolette qui?

risposta

21

In genere, il trucco passa un valore binario in modo che la barra rovesciata diventi parte del carattere multibyte valido. Ecco uno blog post su di esso.

+0

Ho sempre avuto l'impressione che l'iniezione di SQL fosse un problema più serio che probabilmente interessava quasi tutti i tentativi di principianti in uno script. Non riesco ancora a credere che le citazioni magiche ti rendano assolutamente sicuro a meno che tu non abbia usato un set di caratteri multi-byte. –