8791 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

jb_gfx a écrit :
Jamais de la vie. Smiley smile

C'est le rôle de la vue d'échapper les données. Sinon tu te retrouves avec un truc impossible à gérer.

C'est clair. Et le jour où tu veux afficher tes données ailleurs que dans une page HTML, c'est la joie...
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
jb_gfx a écrit :


Jamais de la vie. Smiley smile

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 &lt;strong&gt; ou &lt;br /&gt;

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 :



&lt;strong&gt;J'en connais qui doivent se mordre les doigts d'avoir pensé comme toi&lt;/strong&gt;

Modifié par jb_gfx (22 Aug 2012 - 17:29)
au fait, quand on emploie htmlentities, on les voit où; les entités??? par exemple &lt;
moi je les vois jamais dans mes pages

<strong>J'en connais qui doivent se mordre les doigts d'avoir pensé comme toi
<script type="text/javascript">alert('et ça change quoi au probléme?');</script>
</strong>


Stocker du HTML c'est une bétise, le BBCode a était créé pour ça...
Modifié par JJK801 (22 Aug 2012 - 17:37)
[quote=JJK801]

foreach($_POST as $key =&gt; $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 &quot;
< devient &lt;
> devient &gt;
' 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 "&eacute;pop&eacute;e", donc ta recherche n'aboutira pas.

jb_gfx a écrit :
J'imagine un CMS tournant avec du BBCode. Smiley lol


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 Smiley cligne 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)
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'explique Smiley cligne ou 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 [ -&gt; &lt; et ] -&gt; &gt; , 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 [ -&gt; &lt; et ] -&gt; &gt; , 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)
Pages :