Faille XSS - Protéction ne fonctionne pas
Résolu
blackbutterfly
Messages postés
95
Date d'inscription
Statut
Membre
Dernière intervention
-
blackbutterfly Messages postés 95 Date d'inscription Statut Membre Dernière intervention -
blackbutterfly Messages postés 95 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Faille XSS - Protéction ne fonctionne pas
- K9 web protection - Télécharger - Contrôle parental
- Protection cellule excel - Guide
- Produit de protection solaire - Guide
- Sentinel protection installer - Télécharger - Antivirus & Antimalwares
- Protection en ecriture kodak ✓ - Forum Logiciels
7 réponses
Hello,
Test ceci:
$bla = htmlentities(htmlspecialchars($_POST['blabla']));
Quand tu récupères les données depuis la BDD passe par cette fonction aussi : html_entity_decode.
@+
Test ceci:
$bla = htmlentities(htmlspecialchars($_POST['blabla']));
Quand tu récupères les données depuis la BDD passe par cette fonction aussi : html_entity_decode.
@+
Bonjour
Ce que tu décris pour tes tests en plus est parfaitement normal.
Par contre, pour ton problème initial, il nous manque des informations essentielles :
Comment insères-tu les données dans la base ?
Comment les extrais-tu ?
Comment affiches-tu les données extraites ?
Ce que tu décris pour tes tests en plus est parfaitement normal.
Par contre, pour ton problème initial, il nous manque des informations essentielles :
Comment insères-tu les données dans la base ?
Comment les extrais-tu ?
Comment affiches-tu les données extraites ?
Donc je récupère les données via un form ( jusque là je ne vous apprend rien ( rire ) )
Ensuite je traite les données comme cela :
Bon j'ai 9 $_POST donc en gros c'est toujours la même ...
après j'utilise un fonction PDO de se genre :
et j'obtiens le même résultat avec ce que m'a dit de faire sylk.
Pour les extraire, je fais un fetch() ou fetchAll() ( tout dépend la table ) et donc un echo pour afficher.
"Le hasard n'existe pas, tout est inéluctable."
Ensuite je traite les données comme cela :
if (isset($_POST['Add'])) { if ( $_POST['organisateur'] != null) { htmlentities($_POST['organisateur'], ENT_QUOTES); htmlspecialchars($_POST['organisateur'], ENT_QUOTES); $user = new MUser; $add = $user->adduser($_POST['organisateur']);
Bon j'ai 9 $_POST donc en gros c'est toujours la même ...
après j'utilise un fonction PDO de se genre :
public function Add_Member ($organisateur) { // On se connecte à MySQL $bdd = new PDO('mysql:host=localhost;dbname=test', 'root@localhost', ''); //Utilisation de la requête générant les tuples $reponse = $bdd->prepare("INSERT INTO USER (BOITE) VALUES (?)"); $reponse->execute(array($organisateur)); // Termine le traitement de la requête $reponse->closeCursor(); }
et j'obtiens le même résultat avec ce que m'a dit de faire sylk.
Pour les extraire, je fais un fetch() ou fetchAll() ( tout dépend la table ) et donc un echo pour afficher.
"Le hasard n'existe pas, tout est inéluctable."
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionhtmlentities($_POST['organisateur'], ENT_QUOTES); htmlspecialchars($_POST['organisateur'], ENT_QUOTES);
Ces instructions-là ne font rien du tout ! Elles calculent des valeurs, mais ne les remettent pas dans les variables !!! Ce n'est pas ce que tu avais dit au départ !
Quant à ton adduser, on ne sait pas ce qu'il fait.
C'est déjà une aberration de faire htmlentities et htmlspecialchars à l'enregistrement des informations, ça n'a d'utilité que lors de l'affichage, mais passons.
htmlentities(htmlspecialchars($_POST['blabla'])); comme SlyK te l'a dit est correct, mais il reste à voir comment tu fais l'affichage.
J'ai aussi failli mettre adslashes Effectivement, pour protéger l'insertion des données dans la base, le mieux est d'utiliser la fonction "faite pour" : mysql_real_escape_string (qui ressemble à addslashes) si ta base est mysql. Mais ne mélangeons pas tout.
oui je m'excuse j'ai tapé rapidement
techniquement je fait cela :
Donc ces fonctions sont pour après l'insertion ? à l'affichage je veux dire.
Je m'excuse mais, je viens de les découvrir donc d'après la doc php, c'est vraiment spécifié avec l'utilisation d'une BDD
Je n'utilise pas les mysql_ toutes mes fonction sont en PDO.
Si j'ai bien compris :
Avant l'insertion je ne fais que des addslashes et pour l'affichage les deux autres ?
techniquement je fait cela :
$Eboite = htmlentities($_POST['organisateur'], ENT_QUOTES); $boite = htmlspecialchars($_POST['organisateur'], ENT_QUOTES); et après l'insertion de $boite
Donc ces fonctions sont pour après l'insertion ? à l'affichage je veux dire.
Je m'excuse mais, je viens de les découvrir donc d'après la doc php, c'est vraiment spécifié avec l'utilisation d'une BDD
Je n'utilise pas les mysql_ toutes mes fonction sont en PDO.
Si j'ai bien compris :
Avant l'insertion je ne fais que des addslashes et pour l'affichage les deux autres ?
$Eboite = htmlentities($_POST['organisateur'], ENT_QUOTES); $boite = htmlspecialchars($_POST['organisateur'], ENT_QUOTES);
la première ligne ne sert à rien, tu repars de $_POST['organisateur'] pour la seconde...
Si derrière tu fais un html_entity_decode pour afficher, c'est comme si tu n'avais rien fait du tout !
je viens de les découvrir donc d'après la doc php, c'est vraiment spécifié avec l'utilisation d'une BDD
Peux-tu me dire où tu as vu ça ? En tous cas, pas pas à la page sur htmlentities http://www.php.net/manual/fr/function.htmlentities.php
ni celle sur htmlspecialchars http://www.php.net/manual/fr/function.htmlspecialchars.php.
Si tu utilises PDO, tu n'as besoin de rien de particulier pour protéger tes données lors de l'insertion, si tu utilises des requêtes avec paramètres. C'est l'un des intérêts de PDO d'ailleurs.
Pour l'affichage, htmlspecialchars suffit, ou htmlentities si tu préfères, mais surtout pas l'enchaînement des deux (sauf si tu as bien compris leurs rôles, sinon l'affichage risque de ne pas être ce que tu attends)
je viens de les découvrir donc d'après la doc php, c'est vraiment spécifié avec l'utilisation d'une BDD doc php n'est pas spécifié pour la bdd ( il faut que je me relise avant de poster )
Donc si j'ai bien compris : Je fais un addslashes() de mes valeurs avant de les mettres dans ma base, et quand je veux les afficher je fais l'une des deux.
Si je veux afficher le prénom ( exemple : Méridith ) il faut que j'utilise htmlentities() si j'ai bien compris.
Cela comblera donc la faille ?
Il y a deux problèmes qui n'ont aucun rapport entre eux :
Celui de l'insertion dans la base de données. Tu peux avoir besoin ou non de addslashes, ça dépend de comment tu fais l'insertion des données. Si c'est avec une requête préparée avec des paramètres, PDO se charge de la protection et tu n'as rien à faire. Si c'est toi qui crées la chaîne de requête complète, il faut protéger les données avec addslashes.
Deuxième problème, celui de la faille XSS, qui apparaît quand tu crées le code de ta page HTML avec des données qui contiennent un script. Sans précautions, la balise <script> sera insérée telle quelle dans ta page, et donc exécutée. Mais si tu utilises htmlentities , le < sera remplacé par & lt;. Il n'y aura donc plus de balise <script mais l'affichage du caractère <.
Celui de l'insertion dans la base de données. Tu peux avoir besoin ou non de addslashes, ça dépend de comment tu fais l'insertion des données. Si c'est avec une requête préparée avec des paramètres, PDO se charge de la protection et tu n'as rien à faire. Si c'est toi qui crées la chaîne de requête complète, il faut protéger les données avec addslashes.
Deuxième problème, celui de la faille XSS, qui apparaît quand tu crées le code de ta page HTML avec des données qui contiennent un script. Sans précautions, la balise <script> sera insérée telle quelle dans ta page, et donc exécutée. Mais si tu utilises htmlentities , le < sera remplacé par & lt;. Il n'y aura donc plus de balise <script mais l'affichage du caractère <.