les guillemets magiques

Première chose à faire, que nous dit la documentation php, c'est de désactiver les guillemets magiques.
Pour cela plusieurs solutions qui vous sont décrite sur  : Désactiver les guillemets magiques. En effet selon la configuration du serveur, l'une ou l'autre méthode n'est pas possible.

Avec un un fichier php.ini :

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off


Avec un fichier .htaccess :

php_flag magic_quotes_gpc Off


ou avec une désactivation de magic_quotes_gpc à l'exécution :

<?php
if (get_magic_quotes_gpc()) {
    function 
stripslashes_deep($value)
    {
        
$value is_array($value) ?
                    
array_map('stripslashes_deep'$value) :
                    
stripslashes($value);

        return 
$value;
    }

    
$_POST array_map('stripslashes_deep'$_POST);
    
$_GET array_map('stripslashes_deep'$_GET);
    
$_COOKIE array_map('stripslashes_deep'$_COOKIE);
    
$_REQUEST array_map('stripslashes_deep'$_REQUEST);
}
?>

Cette méthode est inefficace, et il est recommandé d'utiliser les autres solutions si possible.

Les échappements des caractères spéciaux

Maintenant que nos variables globales ($_GET, $_POST, $_REQUEST) ne sont plus protégées, nous allons utiliser la fonction php mysql_real_escape_string. L'utilisation de la fonction mysql_real_escape_string() sur chaque variable évite les injections SQL.

Exemple :
// Requête
$query sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));


Les caractères html

Selon le besoin il est nécessaire de ne pas afficher les caractères html.

  • htmlspecialcharsConvertit les caractères spéciaux en entités HTML. Normalement, si l'encodage du document est bon, il n'y a pas besoin d'utiliser  htmlentitiesqui lui convertit lui tous les caractères éligibles en entités HTML.
  • ereg_replace("<[^>]*>", "", $texte) - Supprime complètement le balisage html.