injection mysql et php

yann214
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 370
Inscription: 17 Nov 2005

injection mysql et php

Message le Lun Oct 06, 2008 17:45

Salut,

Maintenant que PHP met par défaut des \ devant toutes les apostrophes, antislashes, etc. des variables passées en GET, POST ou Cookies, faut-il encore se méfier des injections mysql ?


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3827
Inscription: 14 Sep 2006

Message le Lun Oct 06, 2008 17:50

oui, d'ailleurs j'ai un petit script qui les vire au chargement de chaque page pour que je puisse les gérer moi même.

Code: Tout sélectionner
if (get_magic_quotes_gpc()) {
  foreach($_POST as $i=>$var) $_POST[$i]=stripslashes($var);
  foreach($_GET as $i=>$var) $_GET[$i]=stripslashes($var);
}


Ceci rend le script plus portable et si par malheur, les magic_quotes sont désactivés, ça change rien.
Et pour info, un addslashes ne suffit pas.


spout
WRInaute accro
WRInaute accro
 
Messages: 4106
Inscription: 14 Mai 2003

Message le Lun Oct 06, 2008 18:55

C'est mieux de désactiver les magic_quotes
Pourquoi ? -http://www.webmasterstop.com/63.html (zut le site a changé)
Magic Quotes are Evil!

petit-ourson
WRInaute impliqué
WRInaute impliqué
 
Messages: 855
Inscription: 31 Mai 2004

Re: injection mysql et php

Message le Lun Oct 06, 2008 19:26

yann214 a écrit:Maintenant que PHP met par défaut des \ devant toutes les apostrophes, antislashes, etc. des variables passées en GET, POST ou Cookies, faut-il encore se méfier des injections mysql ?

D'autant plus que ce ne sera plus par défaut dans la prochaine version me semble-t-il.

yann214
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 370
Inscription: 17 Nov 2005

Message le Lun Oct 06, 2008 21:41

Que me conseillez-vous alors ?
Que j'ajoute moi-même ces anti-slashes à chaque requête ?
via la fonction addslashes ? mysql_real_escape_string ?


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3827
Inscription: 14 Sep 2006

Message le Lun Oct 06, 2008 21:44

htmlspecialchars($chaine,ENT_QUOTES);
+ un mysql_real_escape_string

et

intval() pour tout ce qui est nombre entier.

yann214
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 370
Inscription: 17 Nov 2005

Message le Lun Oct 06, 2008 21:49

je viens également de trouver ça dans la doc de php, qui s'adapte à la config :

Code: Tout sélectionner
<?php

if (isset($_POST['product_name']) && isset($_POST['product_description']) && isset($_POST['user_id'])) {
    // Connect

    $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');

    if(!is_resource($link)) {

        echo "Échec de la connexion au serveur\n";
        // ... historisation de l'erreur

    } else {

        // Annule les effets magic_quotes_gpc/magic_quotes_sybase sur ces variables si ON.

        if(get_magic_quotes_gpc()) {
            $product_name        = stripslashes($_POST['product_name']);
            $product_description = stripslashes($_POST['product_description']);
        } else {
            $product_name        = $_POST['product_name'];
            $product_description = $_POST['product_description'];
        }

        // Faire une requête sécurisée
        $query = sprintf("INSERT INTO products (`name`, `description`, `user_id`) VALUES ('%s', '%s', %d)",
                    mysql_real_escape_string($product_name, $link),
                    mysql_real_escape_string($product_description, $link),
                    $_POST['user_id']);

        mysql_query($query, $link);

        if (mysql_affected_rows($link) > 0) {
            echo "Produit inséré\n";
        }
    }
} else {
    echo "Remplissez le formulaire proprement\n";
}
?>


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités