Protection contre injections sql et xss

Résolu
slaxswf Messages postés 32 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 20 mai 2007 - 14 mai 2007 à 00:38
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 ;)

++
A voir également:

7 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 mai 2007 à 07:21
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.
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 mai 2007 à 12:36
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
3
slaxswf Messages postés 32 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 20 mai 2007
14 mai 2007 à 12:40
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;
        }
    }
3
slaxswf Messages postés 32 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 20 mai 2007
14 mai 2007 à 00:54
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);
    }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
slaxswf Messages postés 32 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 20 mai 2007
14 mai 2007 à 11:47
    // 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.
0
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:06
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
0
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
Je précise que Magic_quotes est bien à on sur mon serveur
0
Rejoignez-nous