Faille XSS - Protéction ne fonctionne pas
Résolu/Fermé
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
-
Modifié par blackbutterfly le 15/05/2012 à 14:57
blackbutterfly Messages postés 95 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 29 mai 2012 - 15 mai 2012 à 16:29
blackbutterfly Messages postés 95 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 29 mai 2012 - 15 mai 2012 à 16:29
A voir également:
- Faille XSS - Protéction ne fonctionne pas
- Sentinel protection installer - Télécharger - Antivirus & Antimalwares
- Protection cellule excel - Guide
- Rav endpoint protection c'est quoi ✓ - Forum Réseau
- Rav antivirus ✓ - Forum Antivirus
- Protection anti-ondes téléphone avis - Accueil - Guide accessoires
7 réponses
SlyK
Messages postés
854
Date d'inscription
vendredi 11 mars 2011
Statut
Contributeur sécurité
Dernière intervention
6 octobre 2014
147
15 mai 2012 à 15:00
15 mai 2012 à 15:00
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.
@+
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
15 mai 2012 à 15:05
15 mai 2012 à 15:05
Il passe toujours :/
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
Modifié par blackbutterfly le 15/05/2012 à 15:08
Modifié par blackbutterfly le 15/05/2012 à 15:08
Dans la base il est enregistré comme ceci :
Je comprend pas
<script type="text/javascript&qu
Je comprend pas
Utilisateur anonyme
15 mai 2012 à 15:15
15 mai 2012 à 15:15
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 ?
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
Modifié par blackbutterfly le 15/05/2012 à 15:24
Modifié par blackbutterfly le 15/05/2012 à 15:24
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."
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
15 mai 2012 à 15:26
15 mai 2012 à 15:26
J'ai aussi failli mettre adslashes() mais, j'aimerais avant que ça fonctionne ..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié par le père. le 15/05/2012 à 15:39
Modifié par le père. le 15/05/2012 à 15:39
htmlentities($_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.
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
15 mai 2012 à 15:45
15 mai 2012 à 15:45
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 ?
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
Modifié par blackbutterfly le 15/05/2012 à 15:48
Modifié par blackbutterfly le 15/05/2012 à 15:48
Et add_user c'est add_member en gros. j'ai tout tapé sans C/P sauf la fonction d'ajout d'où le changement de nom. doc php n'est pas spécifié pour la bdd ( il faut que je me relise avant de poster )
( Encore désolé )
( Encore désolé )
Utilisateur anonyme
15 mai 2012 à 16:09
15 mai 2012 à 16:09
$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)
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
15 mai 2012 à 16:16
15 mai 2012 à 16:16
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 ?
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
15 mai 2012 à 16:22
15 mai 2012 à 16:22
En effet cela fonctionne. Merci beaucoup.
Je m'excuse du temps qu'il a fallu pour que cela monte au cerveau.
Merci à vous deux.
Cordialement
Je m'excuse du temps qu'il a fallu pour que cela monte au cerveau.
Merci à vous deux.
Cordialement
Utilisateur anonyme
15 mai 2012 à 16:27
15 mai 2012 à 16:27
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 <.
blackbutterfly
Messages postés
95
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
29 mai 2012
1
Modifié par blackbutterfly le 15/05/2012 à 16:30
Modifié par blackbutterfly le 15/05/2012 à 16:30
Merci beaucoup pour les informations. Je comprend mieux maintenant pourquoi on ma dit de tout faire en PDO ( rire ). Encore merci. Maintenant, je m'attaque à salt :)