Liste des fonctions pour sécuriser des variables

Fermé
Utilisateur anonyme - 4 janv. 2017 à 16:25
 Utilisateur anonyme - 9 janv. 2017 à 07:05
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

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
4 janv. 2017 à 17:29
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
Utilisateur anonyme
4 janv. 2017 à 18:51
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Utilisateur anonyme
Modifié par jordane45 le 4/01/2017 à 19:14
Bonjour

Les fonctions html spécialchar et consore servent lors de l'affichage. .. PAS pour l'insertion en bdd.
0
Utilisateur anonyme > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
4 janv. 2017 à 20:11
oui je sais mais c'est mieux que rien non ?
0
Utilisateur anonyme
4 janv. 2017 à 20:15
ou sinon, je mets strval($donnee);
0
Utilisateur anonyme
5 janv. 2017 à 07:08
ou peut-être avec un filter_var
0
Utilisateur anonyme
7 janv. 2017 à 18:37
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
7 janv. 2017 à 20:08
Sur l'utilité. .. toujours aucun intérêt en vue...

Sur la forme... regarde l'écriture ternaire et les switch case.
0
Utilisateur anonyme
7 janv. 2017 à 21:59
D'accord merci, la 1er fonction sert contre les failles XSS
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Utilisateur anonyme
8 janv. 2017 à 00:46

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
Utilisateur anonyme
8 janv. 2017 à 10:58
Donc, je garde que la fonction "html" ?
Désolé mais je suis ados et j'ai du mal a comprendre certaines notions ....
Merci
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Utilisateur anonyme
9 janv. 2017 à 01:29
.... 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