CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PHP] [mySQL] htmlspecialchars ?

Listas
Listas
Niveau 10
03 mai 2016 à 02:54:26

quand j'stocke dans ma bdd ce que l'utilisateur a renseigné dans son formulaire c'est mieux si je mets htmlspecialchars non ?? :( pour éviter qu'il me chie dans la base quoi :hap:

Message édité le 03 mai 2016 à 02:54:45 par Listas
BlackChinchilla
BlackChinchilla
Niveau 10
03 mai 2016 à 06:25:19

La base de donnée ne contient que du texte et ne va pas traiter quoi que ce soit, tu veux mettre ton htmlspecialchars lorsque tu affiche les informations sur une page. :oui:

M'enfin, faudrais qqn d'autre pour confirmer :hap:

Message édité le 03 mai 2016 à 06:27:47 par BlackChinchilla
kferfred_2
kferfred_2
Niveau 6
03 mai 2016 à 11:31:04

Salut, pour pas que tu te retrouves avec des failles de la taille d'un gouffre dans ton code, faut que tu mette le htmlspecialchars (ou du moins que tu échape les balises de code de n'importe quel moyen) au moment ou tu récupère la chaine de caractères.

Petit article sur les failles XSS : http://www.thegeekstuff.com/2012/02/xss-attack-examples/

En gros tu ne fais jamais confiance en ce que l'utilisateur t'envoie :)

Voila [[sticker:p/1kkr]]

Childermass
Childermass
Niveau 9
03 mai 2016 à 18:38:48

Le htmlspecialchars se fait à l'affichage, pas à l'enregistrement.

On évite de dénaturer les données qu'on enregistre au maximum, c'est le meilleur moyen de se retrouver avec des incohérences ou avec des "est-ce que j'ai fait mon htmlspecialchars avant ou pas ? :doute: "

kferfred_2
kferfred_2
Niveau 6
04 mai 2016 à 00:16:07

Euh nope, on m'a toujours dit de faire les verif sur les input avant l'enregistrement sur BDD.

La raison reste la même que dans ma réponse précédente !

Comme ça à l'affichage tu te dis juste, : "Si ça vient de ma base, c'est que c'est OK !".

Enfin bon j'suis pas spécialiste web non plus ^^

Calistas
Calistas
Niveau 10
04 mai 2016 à 01:31:42

ah voilà j'me disais bien

ptn Childermass jvais me méfier maintenant il m'a conseillé sur l'autre topic là en sécurité en plus :hap: enfin apparemment t'avais raison password_hash > md5 = sha1

Childermass
Childermass
Niveau 9
04 mai 2016 à 19:20:03

Sauf que là aussi j'ai raison, je l'affirme : l'échappement de caractères spéciaux c'est à l'affichage, pas à l'enregistrement (enregistrement en cache mis à part). Tu peux chercher partout sur internet tout le monde dira pareil.

Pseudo supprimé
Pseudo supprimé 04 mai 2016 à 20:20:53

Ouais, une explication ne serait pas de refus svp, car je sais plus où j'ai aussi péché l'idée qu'il faut entourer les $GET et $POST par htmlspecialchars :(

Une rapide recherche sur stackoverflow confirme le propos de Childermass.

Du coup, htmlspecialchars est aussi requis avec la syntaxe alternative de PHP ?

Message édité le 04 mai 2016 à 20:23:50 par Pseudo supprimé
AzazelBee
AzazelBee
Niveau 10
04 mai 2016 à 21:31:57

Si tu utilise la PDO et sa fonction prepare, en bindant les paramètres, ..., tu n'as pas besoin d'utiliser ce genre de chose avant la requête, la chaine est sécurisé par la préparation de la requête et ne permettra pas d'injection SQL il me semble.

Message édité le 04 mai 2016 à 21:32:59 par AzazelBee
Pseudo supprimé
Pseudo supprimé 04 mai 2016 à 22:22:29

Ok merci pour ta réponse. Je le fais déjà.

Donc si on résume, on peut utiliser htmlspecialchars() pour prévenir les injections SQL mais il est préférable d'utiliser le binding de paramètres.

Par contre, pourquoi on utilise aussi ze famous function pour l'affichage, alors que les données qui sont dans la base peuvent être considérées comme safe non ? :(

J'ai pas dû saisir un truc.

AzazelBee
AzazelBee
Niveau 10
04 mai 2016 à 22:30:19

Je ne suis pas sûr à 100%, mais je pense que ça évite d'autre forme d'injection sur les pages.

En soit, avec le binding tu évite les injections SQL et tu protège le SQL.
Avec htmlspecialchars, tu fais gaffe à ce qui est affiché.

Enfaite j'imagine que si le gars stock "&" volontairement, on ne veux pas voir un "&" sur la page, mais bien "&" , du coup avec htmlspecialchars, l'affichage ferais un "&amp;" (ce qui dans le cas cité n'est pas dangeureux, mais pourrais le devenir si l'utilisateur commençait à te pondre un <script>alert("PWNED");</script> (faille XSS)).

edit: vu que JVC le fait "AVANT" visiblement histoire de dénaturer mon post ( un autre exemple du pourquoi c'est mal avant et mieux après quand on veux justement causer de ça :hap: ), voilà comment je l'avais écrit:
http://pastebin.com/zd153ZPH :hap:

edit2: 'fin j'ai un doute de comment JVC gère ça, vu que c'est conservé à l'édition comme je l'ai écrit, mais déjà filtrer d'une façon qui convertit mes caractères en texte brut mais sans les balises html...

Message édité le 04 mai 2016 à 22:35:10 par AzazelBee
Pseudo supprimé
Pseudo supprimé 05 mai 2016 à 00:22:06

Ok je crois que j'ai pigé, merci bien :-)

Childermass
Childermass
Niveau 9
05 mai 2016 à 01:04:16

Le 04 mai 2016 à 22:22:29 yuser a écrit :
Ok merci pour ta réponse. Je le fais déjà.

Donc si on résume, on peut utiliser htmlspecialchars() pour prévenir les injections SQL mais il est préférable d'utiliser le binding de paramètres.

Par contre, pourquoi on utilise aussi ze famous function pour l'affichage, alors que les données qui sont dans la base peuvent être considérées comme safe non ? :(

J'ai pas dû saisir un truc.

Non, htmlspecialchars n'a rien à voir avec les injections SQL

htmlspecialchars c'est pour se protéger des failles XSS, et ça s'utilise à l'affichage.

Pour se protéger des injections SQL on utilise basiquement les requêtes préparées.

Childermass
Childermass
Niveau 9
05 mai 2016 à 02:48:02

Fais gaffe MrSky, ENT_QUOTES c'est juste un flag de htmlspecialchars, htmlspecialchars fait bien plus que du simple ENT_QUOTES.

Pour JVC j'ai envie de dire qu'on s'en fout de comment ils font, c'est pas une référence. Mais s'ils ont bien fait les choses on peut imaginer que ce qui est stocké en BDD n'est pas modifié, qu'il y a un système de cache des pages générées (avec les caractères HTML échappés) au niveau du reverse proxy et que quand on edit un message on bypasse ce cache et on l'invalide. Au niveau du rapport perfs/utilisabilité ce serait cohérent, mais c'est qu'une façon de faire.

Un autre intérêt évident à garder des données non-altérées en BDD est que la plupart des moteurs de templates (Twig, Smarty, Blade...) font l'échappement des entités HTML par défaut, ça fait partie de ce qu'on attend d'eux après tout. Si on fait l'échappement en amont on se retrouve avec un double échappement qui est fait parce qu'on avait pas à le faire avant...

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment