Protection contre injections sql et xss [Résolu]

Messages postés
32
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
20 mai 2007
- - Dernière réponse : artygone
Messages postés
12
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
2 août 2008
- 2 août 2008 à 19:07
Bonsoir tout le monde ;)

Je voudrais savoir si ce code était valide à 100% contre toutes les injections sql et xss possible et connues à ce jour.

Merci de me proposer vos suggestions et améliorations si besoin ;)

++
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13
3
Merci
Salut,

Tu en fait trop : mysql_real_escape_string suffit pour la protection avant insertion dans la base de données.

Y'a une doc, il suffit de la lire : http://fr.php.net/manual/fr/function.mysql-real-escape-string.php
Elle contient des exemples qui t'éclaireront certainement.

Sinon, ton code n'est pas correct : mysql_real_escape_string prend en argument une variable de typy string. Dans ta fonction, tu ne fais aucun contrôle là-dessus, alors qu'il le faut.
C'est pour ça que tu utilises un @ : c'est une mauvaise méthode.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13
3
Merci
Re,

RTFM : http://fr.php.net/manual/fr/function.is-string.php

Si tu fais stripslashes et que les Magic Quotes ne sont pas activés, tu te retrouves dans la mouize. C'est pour ça que dans la doc de PHP il est précisé :
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'];
}

Encore une fois, RTFM : http://fr.php.net/manual/fr/function.get-magic-quotes-gpc.php

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de neigedhiver
Messages postés
32
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
20 mai 2007
3
Merci
oui je savais çà.

Mais mon hébergement à magic quote active donc je l'ai rajouté ;)

Voici la fonction dans ma classe abstraite mysql terminé ;) Si le serveur à magic_quote à on bien sûr.

    // ANTI-INJECTION SQL + XSS
    function protection($valeur, $mode='NUMERIC') {
        switch($mode) {
            case 'NUMERIC' :
                if ($numeric = ctype_digit($valeur)) {
                $valeur = stripslashes($valeur);
                $valeur = htmlspecialchars($valeur);
                $valeur = htmlentities($valeur);
                return @mysql_real_escape_string($valeur);
                } else {echo'no numeric';};
            break;
            case 'ALPHA' :
                if ($alpha = ctype_alpha($valeur)) {
                $valeur = stripslashes($valeur);
                $valeur = htmlspecialchars($valeur);
                $valeur = htmlentities($valeur);
                return @mysql_real_escape_string($valeur);
                } else {echo'no alpha';};
            break;
            case 'ALPHA-NUMERIC' :
                if ($alnum = ctype_alnum($valeur)) {
                $valeur = stripslashes($valeur);
                $valeur = htmlspecialchars($valeur);
                $valeur = htmlentities($valeur);
                return @mysql_real_escape_string($valeur);
                } else {echo'no alpha-numeric';};
            break;
            default:
                $valeur = stripslashes($valeur);
                $valeur = htmlspecialchars($valeur);
                $valeur = htmlentities($valeur);
                return @mysql_real_escape_string($valeur);
            break;
        }
    }

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de slaxswf
Messages postés
32
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
20 mai 2007
0
Merci
Voici le code :

    // ANTI-INJECTION SQL + XSS
    function protection($valeur) {
        $valeur = str_replace("'","",$valeur);
        $valeur = str_replace('"','',$valeur);
        $valeur = str_replace("<","",$valeur);
        $valeur = str_replace(">","",$valeur);
        $valeur = addslashes($valeur);
        $valeur = htmlspecialchars($valeur);
        $valeur = htmlentities($valeur);
        return @mysql_real_escape_string($valeur);
    }
Commenter la réponse de slaxswf
Messages postés
32
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
20 mai 2007
0
Merci
    // ANTI-INJECTION SQL + XSS
    function protection($valeur) {
        $valeur = stripslashes($valeur);
        $valeur = htmlspecialchars($valeur);
        $valeur = htmlentities($valeur);
        return @mysql_real_escape_string($valeur);
    }

Voilà j'ai remplacé par çà:

- Stripslashes pour les magics quotes
- htmlspecialcharts pour convertir les caractères html
- htmlsentities pour les afficher convertit
et mysql_real_escape_string pour echapper les caractères interdits.

comment vérifier que ma variable est de type string ? Merci d'avance pour ton aide.
Commenter la réponse de slaxswf
Messages postés
12
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
2 août 2008
0
Merci
Bonjour à tous.

Je cherche à sécuriser un forum que j'utilise et dont je viens de lire sur le web que ce forum était sensible aux injections SQL...

Alors si j'ai tout bien comprendu :

1- J'utilise la fonction ci dessus
2- Je l'applique à tous les paramètres transmis à ma page PHP

Right or wrong?

Merci d'avance de votre aide
Commenter la réponse de artygone
Messages postés
12
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
2 août 2008
0
Merci
Je précise que Magic_quotes est bien à on sur mon serveur
Commenter la réponse de artygone