Liste des fonctions pour sécuriser des variables

Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour, je cherche des fonctions qui pourront sécuriser une variable avant insertion dans la bdd (j'ai déjà chercher mais je n'ai pas trouvé grand chose....)
Je tiens juste a préciser que j'utilise déjà les requêtes préparés et que j'utilise :
htmlspecialchars($var, ENT_QUOTES);

pour l'affiche de la variable...
Merci d'avance
Nils0

2 réponses

  1. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    Si tu utilises la méthode prepare de PDO correctement, c-a-d avec des paramètres nommés (:nom) ou non nommés (?) pour substituer les valeurs réelles, tu n'as besoin d'aucun autre traitement sur ces valeurs pour sécuriser ta requête :
    Appeler PDO::prepare() et PDOStatement::execute() [...] aident à prévenir les attaques par injection SQL en éliminant le besoin de protéger les paramètres manuellement.
    https://www.php.net/manual/fr/pdo.prepare.php

    Bonne journée,
    0
    1. Utilisateur anonyme
       
      Bonjour, merci de votre réponse ,
      j'ai quand même créer cette fonction :
      class Securite {
      	// Données entrantes
          public static function bdd($donnee, $type = null){
              if(!isset($bdd)){
              	$bdd = connexion_bdd();
              }
              if(isset($type)){
              	$liste_type = array("string", "float", "int");
              	if(in_array($type, $liste_type)){
              		if($type == "string"){
              			if(is_string($donnee)){
              				$donnee = htmlspecialchars($donnee, ENT_QUOTES);
              			} else {
              				return false;
              			}
              		}
              		if($type == "float"){
              			if(is_float($donnee)){
              				$donnee = floatval($donnee);
              			} else {
              				return false;
              			}
              		}
              		if($type == "int"){
              			if(is_int($donnee)){
              				$donnee = intval($donnee);
              			} else {
              				return false;
              			}
              		}
              		return $donnee;
              	} else {
              		return false;
              	}
              } else {
              	// si on précise rien
                  $donnee = htmlspecialchars($donnee, ENT_QUOTES);
                  return $donnee;
              }
          }
          // Données sortantes
          public static function html($donnee){
              $donnee = htmlspecialchars($donnee, ENT_QUOTES);
              return $donnee;
          }
      }
      


      Vous en pensez quoi ?
      Merci
      Nils0
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Utilisateur anonyme
       
      Bonjour

      Les fonctions html spécialchar et consore servent lors de l'affichage. .. PAS pour l'insertion en bdd.
      0
    3. Utilisateur anonyme > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      oui je sais mais c'est mieux que rien non ?
      0
    4. Utilisateur anonyme
       
      ou sinon, je mets strval($donnee);
      0
    5. Utilisateur anonyme
       
      ou peut-être avec un filter_var
      0
  2. Utilisateur anonyme
     
    Désolé de redemander votre aide mais j'aimerais avoir votre avis :
    class Securite {
        // donnée à afficher
        public static function html($donnee, $type, $taillemax = null){
            if(!isset($bdd)){
                $bdd = connexion_bdd();
            }
            $liste_type = array("string", "float", "int");
            if(in_array($type, $liste_type)){
                if(isset($taillemax)){
                    if(intval($taillemax) >= strlen($donnee)){
            	       if($type == "string"){
                          $donnee = $donnee;
            	       }
            	       if($type == "float"){
            		      $donnee = floatval($donnee);
            	       }
            	       if($type == "int"){
            		      $donnee = intval($donnee);
            	       } 
                    } else {
                        return false;
                    }
                } else {
                    if($type == "string"){
                        $donnee = $donnee;
                    }
                    if($type == "float"){
                        $donnee = floatval($donnee);
                    }
                    if($type == "int"){
                        $donnee = intval($donnee);
                    }
                }
                $donnee = preg_replace('/\s{2,}/', ' ', $donnee);
                $donnee = trim($donnee);
            	return htmlspecialchars($donnee, ENT_QUOTES);
            } else {
            	return false;
            }
        }
    
        // donnée à insérer dans la bdd
        public static function bdd($donnee, $type, $taillemax = null){
            if(!isset($bdd)){
                $bdd = connexion_bdd();
            }
            $liste_type = array("string", "float", "int");
            if(in_array($type, $liste_type)){
                if(isset($taillemax)){
                    if(intval($taillemax) >= strlen($donnee)){
                        if($type == "string"){
                            $donnee = $donnee;
                        }
                        if($type == "float"){
                            $donnee = floatval($donnee);
                        }
                        if($type == "int"){
                            $donnee = intval($donnee);
                        }
                    } else {
                        return false;
                    }
                } else {
                    if($type == "string"){
                        $donnee = $donnee;
                    }
                    if($type == "float"){
                        $donnee = floatval($donnee);
                    }
                    if($type == "int"){
                        $donnee = intval($donnee);
                    }
                }
                return $donnee;
            } else {
                return false;
                    }
        }
    }
    
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Sur l'utilité. .. toujours aucun intérêt en vue...

      Sur la forme... regarde l'écriture ternaire et les switch case.
      0
    2. Utilisateur anonyme
       
      D'accord merci, la 1er fonction sert contre les failles XSS
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Utilisateur anonyme
       

      la 1er fonction sert contre les failles XSS

      Bon..
      - déjà .. la 1 et la 2 sont identiques .... donc aucun interret
      - La variable $bdd n'est utilisée nul part ....
      - Pour se protéger des failles XSS ... il faut s'assurer qu'il n'y a pas dans le texte des choses comme
      <script 
      ....
      </script> 


      Bref...Plusieurs techniques permettent d’éviter le XSS : (à n'utiliser QUE POUR L'AFFICHAGE )
      - Utiliser la fonction htmlspecialchars(), il convertit les caractères spéciaux en entités HTML.
      - Utiliser la fonction htmlentities() qui est identique à htmlspecialchars() sauf qu’elle filtre tout les caractères equivalents au codage html ou javascript.

      Tes autres "fonctions" .. ne servent à rien ( on te l'a déjà dit non ? )
      0
    4. Utilisateur anonyme
       
      Donc, je garde que la fonction "html" ?
      Désolé mais je suis ados et j'ai du mal a comprendre certaines notions ....
      Merci
      0
    5. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Utilisateur anonyme
       
      .... Tu ne gardes QUE pour l'affichage (donc en l’occurrence ce qui semble être ta fonction "html" (dans laquelle tu retire tout le code inutile...))
      Sachant que ce qui est réellement utile pour l'affichage et la protection contre le xss donc... c'est le htmlspecialchars (et/ou le htmlentities).
      Je ne sais pas comment te le dire autrement ..... ados ou pas... à un moment faut lire ce que les gens écrivent et essayer de le comprendre .... sans qu'on est à le répéter 250 fois ...
      0