[RESOLU] Injection caractères de contrôle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Injection caractères de contrôle

Re: [RESOLU] Injection caractères de contrôle

par devlop78 » 24 mars 2010, 15:22

Tout à fait. Tant que IE n'affiche pas l'UTF-8 comme de l'AINSi :D :D :D :D :D :D c'est le principal :P :P :P :lol: :lol: :shock:

Re: [RESOLU] Injection caractères de contrôle

par AB » 24 mars 2010, 15:19

Oui enfin ce lien c'était juste pour info, et si tu as une curiosité particulière pour l'encodage.

Mais bon, pour ceux qui liraient ce topic en diagonale ou par la fin, je précise qu'il n'y a pas besoin d'avoir lu et d'avoir compris tout ça avant de coder en utf-8 : ce n'est pas un prérequis indispensable. Don't be afraid :)

A +

Re: [RESOLU] Injection caractères de contrôle

par devlop78 » 24 mars 2010, 14:45

Oui, mais c'est un problème de temps lol. Ya plein de blablabla, donc je le ferai, mais à partir plus tard :)

Oki pour le vert.

a++

Re: [RESOLU] Injection caractères de contrôle

par AB » 24 mars 2010, 14:38

Si tu as suivi le lien que j'ai donné, il y aussi des liens internes sur l'unicode... et des réponses à tes précédentes questions sur la différence entre utf-8 utf-16 etc.

Sinon pour mettre un topic résolu, suffit que tu choisisses d'accepter une réponse en haut d'une d'entre elles. Et ça fait un zoli tag vert :wink:

[Resolu] Re: Injection caractères de contrôle

par devlop78 » 24 mars 2010, 14:25

Non c'est sur l'ensemble Unicode-UTF qu'il faudrait se renseigner. Sujet Clos.

Re: Injection caractères de contrôle

par AB » 24 mars 2010, 11:43

Bah tu en sauras plus en faisant des tutos sur l'utf-8... En complément si tu veux plus d'infos sur l'encodage il y a un bon article sur Wiki http://fr.wikipedia.org/wiki/UTF-8

Re: Injection caractères de contrôle

par devlop78 » 23 mars 2010, 22:06

Ca correspondrait à l'unicode, basé sur l'UTF-16. Reste à savoir comment convertir UTF-8 en UTF-16 et à savoir si UTF-16 a autant de caractères que UTF-8. Reste surtout à y comprendre qqchose (lol). Je crois que je vais m'arrêter là !

Re: Injection caractères de contrôle

par devlop78 » 23 mars 2010, 21:18

Pour le signe 中, l'url est %E4%B8%AD
J'en conclus que dans l'url les % sont chaque octet. Donc ici 中 possède 3 octets de décimales 228, 184 et 173.
En essayant chr(228) . chr(184) . chr(173) j'obtiens bien l'affichage de 中. Presque CQFD.
Mais qu'en est-il de son équivalent au nom inconnu 中 ??? A quoi ça correspond ? Comment l'obtenir sans le connaitre ? Car je ne vois aucun rapport (à priori) avec E4B8AD ou 228184173 ni même la conversion de E4B8AD en décimal.

les € correspondent (commentcamarche appelle ça code ISO) au caractère € qui a comme valeur décimale 128. Mais en UTF-8, à quoi correspondent ces chiffres ???

Merci.

Re: Injection caractères de contrôle

par AB » 23 mars 2010, 20:13

...Je vais travailler pour une boite, et si on me demande de coder en ISO, je ne vais pas leur dire "euh ... je sais pas"...
Y'a pas de soucis ça ne risque pas d'arriver, excepté si le site est déjà existant auquel cas mélanger les deux encodages est source de prise de tête, pour le reste tous les nouveaux sites pro sont codés en utf-8, d'ailleurs pourquoi s'en priver... Et puis l'encodage iso tu l'a déjà fait donc en cas de besoin...
A + :wink:

Re: Injection caractères de contrôle

par devlop78 » 23 mars 2010, 19:37

Oui tu as raison, mais c'était important pour moi de comprendre qui fait quoi (pourquoi € s'affichait). Je vais travailler pour une boite, et si on me demande de coder en ISO, je ne vais pas leur dire "euh ... je sais pas". Mais je suis d'accord que UTF-8 dans la mesure où tout le monde parle la même langue, c'est le futur. ISO1 c'est un peu comme un belge qui parle à un français, en lui disant "à tantot" ou "pinpin" (mec stupide) ...

Merci pour vos aides.

Re: Injection caractères de contrôle

par AB » 23 mars 2010, 19:33

Mais je trouve ça amusant que les formulaires veuillent à tout prix, au risque de donner des codes invalides, nous envoyer les données.
Ce n'est pas au formulaire de faire le tri.

Pour le reste tu es entrain d'expérimenter les limites et problèmes de l'encodage ISO et tu connais déjà LA solution. Alors surtout si le développement Web doit devenir ton métier, tu sais ce qu'il te reste à faire : roules en utf-8 :wink:

Re: Injection caractères de contrôle

par stealth35 » 23 mars 2010, 19:19

avec Firefox vous obtenez non pas %25%24 mais le caractère chinois ? Pourquoi pas ... ils font ce qu'ils veulent à partir du moment où à l'arrivée c'est la même chose :) Si j'y pense je regarderai l'header HTTP, mais de toutes façons, un caractère chinois n'a rien à faire dans de l'ISO-8859-1, on est d'accord ?
ouai, mais firefox accepter l'unicode dans sa barre d'adresse, donc en utf-8
Par contre le signe € est assez légitime et je n'ai pas envie de coder en ISO-8859-15 (parce que autant passer à l'UTF8 dans ce cas). J'imagine qu'il faudrait donc sur l'application convertir toute la plage dédiée AINSI aux équivalents entités HTML. Ca sera en plus de la désactivation de magic_quotes (qui n'a pas à être sur on sur php5, ça me perturbe.)
iso-8859-15 c'est le pire niveau compat

J'ai un site qui parle de développement Web, et la majorité des articles est malheureusement consacrée au problèmes d'encodage ou de compatibilité IE/Firefox(+les autres). Rien que les images PNG transparents sur IE6 m'ont fait perdre la moitié de mes cheveux (lol). JE suis 100% pro normes et les hacks IE ça m'énerve !!
je développe pu pour IE6 c'est réglé, c'est moins beau mais tenpis

Re: Injection caractères de contrôle

par devlop78 » 23 mars 2010, 19:16

avec Firefox vous obtenez non pas %25%24 mais le caractère chinois ? Pourquoi pas ... ils font ce qu'ils veulent à partir du moment où à l'arrivée c'est la même chose :) Si j'y pense je regarderai l'header HTTP, mais de toutes façons, un caractère chinois n'a rien à faire dans de l'ISO-8859-1, on est d'accord ?

Par contre le signe € est assez légitime et je n'ai pas envie de coder en ISO-8859-15 (parce que autant passer à l'UTF8 dans ce cas). J'imagine qu'il faudrait donc sur l'application convertir toute la plage dédiée AINSI aux équivalents entités HTML. Ca sera en plus de la désactivation de magic_quotes (qui n'a pas à être sur on sur php5, ça me perturbe.)

Le forum phpfrance est bien j'aurai du y poster mes messages quand j'ai eu des problèmes avec GD (encore un problème d'affichage des caractères ... pour changer)

:evil:

J'ai un site qui parle de développement Web, et la majorité des articles est malheureusement consacrée au problèmes d'encodage ou de compatibilité IE/Firefox(+les autres). Rien que les images PNG transparents sur IE6 m'ont fait perdre la moitié de mes cheveux (lol). JE suis 100% pro normes et les hacks IE ça m'énerve !!

Re: Injection caractères de contrôle

par stealth35 » 23 mars 2010, 19:02

normale c'est la ou je voulais en venir,
PHp par default envoie les entête en iso-8859-1, ducoup il essaye de transformer de l'utf-8 en ISO et les caractère la n'existe pas

2 solutions :
1 : mettre un header('Content-type: text/html; charset=utf-8'); a chaque pas PHp qu'on veut UTF-8
2 : aller dans le PHP.ini et mettre default_charset = "utf-8"

et bingo :wink:

firefox, chrome : dans l'adresse on a non caratere chinois
ie : dans l'adresse on a version urlencode

Re: Injection caractères de contrôle

par devlop78 » 23 mars 2010, 18:57

non ...

si j'utilise ton code :

1) ca ne fonctionne pas
2) IE ne convertit pas le caractère chinois en entité unicode html

Si tu tapes

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<?php
$str = $_GET['str'];
echo htmlentities($str, ENT_QUOTES, 'UTF-8');
?>
<form>
<textarea name="str"></textarea>
<button type="submit">ok</button>
</form>
</body>
</html>

il affiche &#22269;
si tu remplace htmlentities par $str, là le caractère chinois s'affiche. Dans le barre url on voit : test24.php?str=%26%2322269%3B alors que sans préciser l'encodage, on voyait quelque chose comme %25%24 (c'était pas les mêmes chiffres mais c'était ce style, c-a-d le caractère sur deux octets, normal quoi).