Suite à un entretien dernièrement ou j'ai passé un test de PHP dans lequel on me demandait - encore - de choisir entre 4 choix pour empêcher les injections SQL.
ET BAH C'EST PAS ADDSLASHES !!!
J'avais envie de le crier haut et fort.

Quelques explications : Les véritables méthodes d'échappement d'une requète liée à une base sont les méthodes propres à ces bases ! Par exemple, la fonction PHP mysql_real_escape_string n'est utilisable QUE si la connexion à MySQL est ouverte. Cela car c'est belle et bien MySQL qui échappe la chaîne et non PHP.

Ainsi, toutes les bases de données ont leurs méthodes d'échappement, et les fonctions PHP qui les appellent :

L'arrivée de composant comme PDO permet de s'abstraire de tous ces problèmes (à condition de ne pas faire n'imp). Je conseille personnellement de ne plus utiliser que ça. Ça évite d'avoir à réfléchir sur des problématiques de sécurité seul dans son coin alors qu'une communauté bien plus forte que toi le fait à ta place !

Bon, sinon, pourquoi addslashes c'est pas bon ? Simplement à cause d'une 'confusion' entre single-byte et multi-byte string.

En single-byte string, 0xbf27 devient 0xbf (¿) suivi de 0x27 ('), c'est à dire (¿'). Ceci car 0xbf27 n'est pas un multi-byte valide. Si on passe ceci dans addslashes, on obtient 0xbf5c27, c'est à dire ¿\' en single-byte string. Seulement voila 0xbf5c est un multi-byte string valide, du coup, la chaîne devient 縗 ' Et voila notre ( ' ) qui n'est plus échappé.