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 

Votre réponse

7 réponses

Meilleure réponse
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 14 mai 2007 à 07:21
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.

Merci neigedhiver 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de neigedhiver
Meilleure réponse
neigedhiver 2492 Messages postés jeudi 30 novembre 2006Date d'inscription 14 janvier 2011 Dernière intervention - 14 mai 2007 à 12:36
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

Merci neigedhiver 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de neigedhiver
Meilleure réponse
slaxswf 32 Messages postés jeudi 28 décembre 2006Date d'inscription 20 mai 2007 Dernière intervention - 14 mai 2007 à 12:40
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;
        }
    }

Merci slaxswf 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

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
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
slaxswf 32 Messages postés jeudi 28 décembre 2006Date d'inscription 20 mai 2007 Dernière intervention - 14 mai 2007 à 11:47
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
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
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
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
Merci
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.