Se utilizzi costantemente mysql_real_escape_string
ogni volta che inserisci il contenuto in una stringa SQL letterale, va bene, non c'è alcun problema di sicurezza.
Tuttavia, ciò che ci ha insegnato è che:
-
Catturare ogni singola posizione che si inietta in una stringa SQL letterale è difficile. Nel mondo reale, a volte i casi privi di escape del software vengono ignorati, anche quando il codificatore originale ha compreso correttamente l'escape di SQL. Oppure le iniezioni prime vengono aggiunte in seguito alla manutenzione. O l'escape è omesso dove il programmatore pensa che non ci sia la possibilità che nella stringa ci siano caratteri speciali, ma in seguito qualcosa cambierà e quell'ipotesi non è più valida.
-
Sporcare le tue query con ...'.mysql_real_escape_string($value, $db).'...
le rende noiose e difficili da leggere.
-
Le persone continuano a non capire il problema di codifica a cui fa riferimento real
e di conseguenza non riescono a impostare il set di caratteri nel modo corretto ( mysql_set_charset()
, non male SET NAMES
).
Possiamo dedicare il resto del tempo a inseguire questi problemi nel codice scritto con l'estensione mysql
, o semplicemente spingere tutti a utilizzare invece query parametrizzate, che funzionano correttamente senza richiedere alcuna comprensione approfondita dell'elaborazione delle stringhe.