IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Discussion :

Sécuriser les $_POST


Sujet :

Sécurité

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 28
    Par défaut Sécuriser les $_POST
    Bonjour,
    Dans un précédent message, je demandais s'il fallait aussi "filtrer" les $_POST venus des champs de type "hidden" (et pourquoi pas checkbox et select)
    La réponse fut claire et limpide, il faut protéger TOUS les $_POST.
    Partant de là, je me dit que ce qui suit serait utile en début de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (isset($_POST)) {
    	$ne_pas_traiter = array('post1', 'post2', 'post3', .......); // au cas où
    	foreach ($_POST as $cle => $val) {
    		if (!in_array($cle, $ne_pas_traiter)) $_POST[$cle] = securite_bdd($val);
    	}
    }
    Concernant securite_bdd() j'utilise ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function securite_bdd($string) { // HTML => BDD
    	$nom_base = 'bobi';
    	$identifiant_base = 'root';
    	$mdp_base = '';
    	$nom_du_serveur = 'localhost';
    	$connect = mysql_connect($nom_du_serveur, $identifiant_base, $mdp_base);
    	$string = addcslashes(mysql_real_escape_string($string), '%_');
    	return $string;
    }
    Selon moi, ça permet de n'oublier aucun $_POST, y-compris si certains sont ajoutés a posteriori quand l'application évolue (nouvelles fonctionnalités, etc.)
    Bon, sans doute une problématique de débutant, mais j'en suis un
    Merci pour votre lecture et vos remarques.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par défaut
    J'ai pas tout regardé en détails, mais première question pourquoi fais-tu un addcslashes en plus du mysql_real_escape ?

    Sinon c'est une bonne idée de mettre un filtre par défaut, mais attention, ton filtre n'est pas le même lorsque tu fais de l'affichage html ou de l'insertion dans une BD.

    De plus on conseil généralement d'utiliser des requêtes paramétrables :
    http://php.net/manual/fr/pdo.prepared-statements.php

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 28
    Par défaut
    Merci pour le retour.
    pourquoi fais-tu un addcslashes en plus du mysql_real_escape ?
    J'utilise très classiquement mysql_real_escape_string() pour éviter l'injection. Par ailleurs, j'ai lu ceci :
    Contrairement à ce qu'on pourrait penser, il est toujours possible de réaliser des injections SQL particulières qui visent notamment à surcharger votre serveur en alourdissant votre requête. Ce type d'injection utilise les caractères % et _.
    D'où l'utilisation de addcslashes() après mysql_real_escape_string()


    ________________________________________________
    attention, ton filtre n'est pas le même lorsque tu fais de l'affichage html ou de l'insertion dans une BD
    Dans le code que j'ai soumis, il y a une ligne commentée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function securite_bdd($string) { // HTML => BDD
    Ceci pour dire que cette fonction concerne l'insertion en BDD.
    Concernant l'affichage (voir la ligne commentée ci-dessous), j'utilise la fonction suivante, censée éviter les attaques XSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function aff_bdd($string) { // BDD => HTML
    	$string = htmlentities($string, ENT_QUOTES, 'UTF-8');
    	return $string;
    }
    Note : tout est en UTF-8, y-compris l'encodage des fichiers (UTF-8 sans BOM)
    ________________________________________________
    Concernant les PDO, je code (encore) en PHP4, donc je fais sans ; désolé pour cette "préhistoricité" !
    ________________________________________________
    Concernant l'objet initial de mon post, à savoir le traitement automatique de tous les $_POST[], manticore trouve que l'idée est bonne ; je vais donc l'utiliser. Cela dit, je m'interroge sur le fait de n'avoir jamais vu ça sur des extraits de code relatifs à la sécurité.

    Je remercie par avance toutes celles et ceux qui donneront leur avis sur les précisions que je viens d'apporter.

Discussions similaires

  1. Vérifier si les $_POST sont null ou pas
    Par furtif1 dans le forum Langage
    Réponses: 5
    Dernier message: 08/04/2007, 12h27
  2. [AJAX] Sécuriser les php nécéssaires aux xmlhttprequest
    Par gandalf76fr dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/01/2007, 13h11
  3. [Sécurité] sécuriser les données d'un site
    Par lodan dans le forum Langage
    Réponses: 10
    Dernier message: 20/07/2006, 12h26
  4. [FB1.5] Sécuriser les transmissions
    Par nycolas dans le forum Outils
    Réponses: 6
    Dernier message: 29/11/2005, 11h27
  5. Sécuriser les Métadata IB en utilisation mono ?
    Par ADN75018 dans le forum Débuter
    Réponses: 23
    Dernier message: 31/01/2003, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo