Protection contre injections sql et xss [Résolu]

slaxswf 32 Messages postés jeudi 28 décembre 2006Date d'inscription 20 mai 2007 Dernière intervention - 14 mai 2007 à 00:38 - Dernière réponse : artygone 12 Messages postés dimanche 23 janvier 2005Date d'inscription 2 août 2008 Dernière intervention
- 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

Répondre au sujet
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 14 mai 2007 à 07:21
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de neigedhiver
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 14 mai 2007 à 12:36
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de neigedhiver
slaxswf 32 Messages postés jeudi 28 décembre 2006Date d'inscription 20 mai 2007 Dernière intervention - 14 mai 2007 à 12:40
+3
Utile
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;
        }
    }
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de slaxswf
slaxswf 32 Messages postés jeudi 28 décembre 2006Date d'inscription 20 mai 2007 Dernière intervention - 14 mai 2007 à 00:54
0
Utile
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
slaxswf 32 Messages postés jeudi 28 décembre 2006Date d'inscription 20 mai 2007 Dernière intervention - 14 mai 2007 à 11:47
0
Utile
    // 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
artygone 12 Messages postés dimanche 23 janvier 2005Date d'inscription 2 août 2008 Dernière intervention - 2 août 2008 à 19:06
0
Utile
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
artygone 12 Messages postés dimanche 23 janvier 2005Date d'inscription 2 août 2008 Dernière intervention - 2 août 2008 à 19:07
0
Utile
Je précise que Magic_quotes est bien à on sur mon serveur
Commenter la réponse de artygone

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.