8791 sujets
jb_gfx a écrit :
Jamais de la vie.![]()
C'est le rôle de la vue d'échapper les données. Sinon tu te retrouves avec un truc impossible à gérer.
non, ça change rien , faut juste pas utiliser htmlentities pour pas pourrir ses recherches SQL, ce n'est bien sur pas a faire sur toutes les données juste les données provenant de source non fiable et destinées a être afficher en HTML, de plus c'est réversible pour les rares occasions ou on doit les sortir autrement qu'en HTML. Aprés chacun sa vison de la chose...
lionel_css3 a écrit :
en plus il y a certains champ ou j'ai autorisé du html , style <strong> ou <br />
je sens que je vais bâcher pour aujourd'hui et laisser passer une nuit dessus lol
non, au lieu de faire une boucle tu modifie que les champs qui en ont besoin.
Modifié par JJK801 (22 Aug 2012 - 17:13)
JJK801 a écrit :
non, ça change rien , faut juste pas utiliser htmlentities pour pas pourrir ses recherches SQL, ce n'est bien sur pas a faire sur toutes les données juste les données provenant de source non fiable et destinées a être afficher en HTML, de plus c'est réversible pour les rares occasions ou on doit les sortir autrement qu'en HTML. Aprés chacun sa vison de la chose...
<strong>J'en connais qui doivent se mordre les doigts d'avoir pensé comme toi</strong>
jb_gfx a écrit :
<strong>J'en connais qui doivent se mordre les doigts d'avoir pensé comme toi</strong>
Modifié par jb_gfx (22 Aug 2012 - 17:29)
[quote=JJK801]
j'ai essayé ton code et effectivement en le passant avant la requête INSERT ça modifie les valeurs saisies, dans la base mysql, et j'ai l'impression que ça solutionne une partie du problème.
Quelle est la différence entre htmlentities et htmlspécialchars puisque les résultats semblent les mêmes:
" devient "
< devient <
> devient >
' reste inchangé (pourquoi ??)
Modifié par lionel_css3 (22 Aug 2012 - 21:40)
foreach($_POST as $key => $value)
{
if(is_string($value))
{
$_POST[$key] = htmlspecialchars($value);
}
}
j'ai essayé ton code et effectivement en le passant avant la requête INSERT ça modifie les valeurs saisies, dans la base mysql, et j'ai l'impression que ça solutionne une partie du problème.
Quelle est la différence entre htmlentities et htmlspécialchars puisque les résultats semblent les mêmes:
" devient "
< devient <
> devient >
' reste inchangé (pourquoi ??)
Modifié par lionel_css3 (22 Aug 2012 - 21:40)
Comme l'a dit jb plus haut, htmlentities encode également les caractères non ASCII (accents, cédilles, etc...), c'est une mauvaise solution dans le sens ou lorsque tu va faire une recherche en SQL, si tu cherche "épopée", tu aura en réalité dans ta base "épopée", donc ta recherche n'aboutira pas.
Le diable est dans les détails ^^ après si pour toi ça fait une différence de faire un htmlspecialchars avant d’insérer ou systématiquement à chaque affichage, je veut bien que tu m'explique
ou alors tu l'utilise pas du tout et là, bonjour les redirections de sites pornos sur ton forum, ou pire...
De plus, le BBCode est un simple moyen transitionnel qui te permet de différencier le html brut introduit par l'utilisateur des balises autorisées, tu peut aussi effectuer la conversion avant de le rentrer en base si tu préfère stocker le HTML.
Modifié par JJK801 (23 Aug 2012 - 08:44)
jb_gfx a écrit :
J'imagine un CMS tournant avec du BBCode.![]()
JJK801 a écrit :
ce n'est bien sur pas a faire sur toutes les données juste les données provenant de source non fiable et destinées a être afficher en HTML
Le diable est dans les détails ^^ après si pour toi ça fait une différence de faire un htmlspecialchars avant d’insérer ou systématiquement à chaque affichage, je veut bien que tu m'explique

De plus, le BBCode est un simple moyen transitionnel qui te permet de différencier le html brut introduit par l'utilisateur des balises autorisées, tu peut aussi effectuer la conversion avant de le rentrer en base si tu préfère stocker le HTML.
Modifié par JJK801 (23 Aug 2012 - 08:44)
JJK801 a écrit :
De plus, le BBCode est un simple moyen transitionnel qui te permet de différencier le html brut introduit par l'utilisateur des balises autorisées, tu peut aussi effectuer la conversion avant de le rentrer en base si tu préfère stocker le HTML.
j'avais pas pensé à ça, en fait je peux saisir et stocker [ strong ]un mot[ /strong ] dans la base mysql et alors juste avant d'afficher dans une page, dans un paragraphe ou autre, je fais un remplacement de chaines [ -> < et ] -> > , c'est ça?
c'est à moi de la faire dans le code, y a pas de fonctions standard pour ça?
Ps: je veux pas avoir l'air trop neuneu, mais je fais pas du Php souvent, lol
JJK801 a écrit :
Le diable est dans les détails ^^ après si pour toi ça fait une différence de faire un htmlspecialchars avant d’insérer ou systématiquement à chaque affichage, je veut bien que tu m'expliqueou alors tu l'utilise pas du tout et là, bonjour les redirections de sites pornos sur ton forum, ou pire...
Il est beaucoup moins dangereux d'effectuer l'échappement pour toutes les données au moment de l'affichage : celles qui viennent d'une base de données, d'une variable de requête, d'un fichier texte, ... Cela évite les ambiguïtés qui aboutissent systématiquement au double échappement ou au non échappement, et simplifie beaucoup les choses si tu as besoin d'une autre vue que le HTML.
Dans le cas où l'on a besoin de stocker du contenu "balisé", le problème est évidemment différent. La solution la plus sécurisée et la plus souple est l'utilisation d'un langage intermédiaire (HTML, BBCode, peu importe) que l'on "transbalise" systématiquement au niveau de la vue pour éviter d'injecter des balises indésirables dans la sortie. Mais les problèmes de performance peuvent pointer leur nez ici...
Modifié par Julien Royer (23 Aug 2012 - 11:41)
lionel_css3 a écrit :
j'avais pas pensé à ça, en fait je peux saisir et stocker [ strong ]un mot[ /strong ] dans la base mysql et alors juste avant d'afficher dans une page, dans un paragraphe ou autre, je fais un remplacement de chaines [ -> < et ] -> > , c'est ça?
c'est à moi de la faire dans le code, y a pas de fonctions standard pour ça?
Ps: je veux pas avoir l'air trop neuneu, mais je fais pas du Php souvent, lol
Remplacer simplement les crochets par des chevrons serai inutile car il suffirai a l'utilisateur de faire de même pour la balise script, l'idéale est de définir une black liste ou une white liste de balises pour la conversion.
@Julien Royer: Je ne suis pas coutumier des insertions de HTML dans la BDD, donc je ne suis probablement pas du meilleur avis mais pour moi lorsqu'il j’agis d'un forum le BBCode suffis amplement à la mise en forme. Après conversion en entrée ou en sortie, c'est une question de choix2 script convertissant les données dans un sens et dans l'autre suffisent, mais comme tu le souligne, le faire à chaque affichage à un coût...
JJK801 a écrit :
mais comme tu le souligne, le faire à chaque affichage à un coût...
Un système de cache basique réglera ce problème.
lionel_css3 a écrit :
j'avais pas pensé à ça, en fait je peux saisir et stocker [ strong ]un mot[ /strong ] dans la base mysql et alors juste avant d'afficher dans une page, dans un paragraphe ou autre, je fais un remplacement de chaines [ -> < et ] -> > , c'est ça?
c'est à moi de la faire dans le code, y a pas de fonctions standard pour ça?
Ps: je veux pas avoir l'air trop neuneu, mais je fais pas du Php souvent, lol
Si tu pars sur des remplacement de chaines ou des regex pour gérer le BBCode tu vas t'en mordre les doigts. Il vaut mieux utiliser un vrai parseur, c'est beaucoup plus sécurisé. Sinon tu t'exposes à des injections de code dans tous les sens. Mais aussi au risque d'avoir du HTML invalide en sortie.
Cette classe fait ça très bien : http://www.christian-seiler.de/projekte/php/bbcode/index_en.html
Modifié par jb_gfx (23 Aug 2012 - 16:12)
jb_gfx a écrit :
Et la micro-optimisation, c'est de l'enculage de mouche : le 1er commandement du dev web :
http://forum.alsacreations.com/topic-20-63246-1-Trucs-astuces-et-bonnes-pratiques-en-PHP.html
En effet j'ai trouvé un article qui confirme votre point de vue avec des preuves à l'appui bien sûr.
http://nikic.github.com/2012/01/09/Disproving-the-Single-Quotes-Performance-Myth.html
En terme de performance les doubles quotes sont même de l'ordre de 0,01 % plus rapide que les simples quotes et il en va de meme pour l'interpolation.
Les guillemets simples ont des usages plus pratiques que juste pour la performance , en ce qu'elle donne la coloration syntaxique dans tous les IDE et c'est agréable de ne pas avoir à échapper les guillemets doubles dans une chaîne (par exemple les chaînes HTML)