furious Gontran Posté 3 Février 2005 Partager Posté 3 Février 2005 Salut. Mon code: echo"<td>Nom: <input name='Aut1_Nom' type='text' id='Nom' size='31' maxlength='30' value=".$Nom1."></td>"; Mon probleme, c'est que si $Nom1 contient des guillemets, cela coupe mon nom en deux... Comment faire? (je suis sur que Kafka a notre epoque aurais ete programmeur) Lien vers le commentaire Partager sur d’autres sites More sharing options...
-ZN- Posté 3 Février 2005 Partager Posté 3 Février 2005 T'as essaye de jouer avec les \ pour bloquer les guillemets? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 3 Février 2005 Partager Posté 3 Février 2005 Tu as manifestement un problème d'intégration des quotes... Tu peux utiliser addslashes($Nom1) lors de la création de la chaîne, si tu n'oublies pas d'appeler stripslashes($Nom1) lors de son affichage Et tu devrais aussi mettre des quotes autour de la valeur, comme dans echo "value='".addslashes($Nom1)."'></td>"; pour éviter les erreurs de validation ensuite. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Commmint Posté 3 Février 2005 Partager Posté 3 Février 2005 Mets ton expression en singlequotes ', et écrit ton HTML normalement. Si la chaine de caractère possède une apostrophe, précède-là d'un caractère d'échappement \ ça donne un truc comme ça: echo '<td>Nom: <input name="Aut1_Nom" type="text" id="Nom" size="31" maxlength="30" value="'.$Nom1.'"></td>'; c'est plus sain d'échapper quelques caractères dans ton HTML que mettre tous les attributs en singlequotes !!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ganf Posté 3 Février 2005 Partager Posté 3 Février 2005 (modifié) Dites, on parle bien de la même chose ? Quand on envoie une chaîne de texte vers une sortie on doit *toujours* faire l'échappement adapté. Là il n'y a rien, c'est au mieux un truc qui marche pas dans certains cas, plus probablement une faille de sécurité potentielle (XSS dans ce cas là). En SQL l'échappement ça peut être addslashes, mysql_real_escape_string(), str_replace("'", "''", ...) et plein d'autres suivant ta base. En HTML (ton cas) c'est htmlspecialchars(...., ENT_QUOTES) ou htmlentities() si tu préfères. Je suis effaré de voir que pour tout le monde c'est un addslashes. Ca veut dire que: - vous ne comprenez pas ce que vous manipulez - vous ne faites pas habituellement vos échappement pour les envois de texte vers le HTML donc vos codes sont potentiellement aussi troués que ma passoire. [EDIT: désolé si ça a été pris en agressif, ce dernier paragraphe n'était pas l'intention. Pour moi dire que quelqu'un n'a pas compris n'est pas forcément ni mauvais ni agressif, ni même vraiment critique] Modifié 3 Février 2005 par Ganf Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 3 Février 2005 Partager Posté 3 Février 2005 Ganf, Tu as raison pour l'échappement des données du formulaire. De là à être "effaré" et poster ce type de supposition, tu y vas tout de même un peu fort. Il n'entre pas dans les intentions du Hub de donner un cours sur la sécurité Php pour chaque ligne de code que postent nos membres. J'ose espérer que ton livre traite ce sujet. La question était: "les parenthèses causent problème" ... et la réponse fut : "fais les précéder d'un antislash". L'utilisation que Furious Gontran fait de ses données n'est pas renseignée. Elles peuvent très bien être incluses dans une base de données, et ni toi ni moi n'avons l'info sur base d'une seule ligne de code donnée en exemple. Merci de poster moins "agressivement". Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ganf Posté 3 Février 2005 Partager Posté 3 Février 2005 Désolé si j'ai pu paraitre agressif, ce n'était pas le but. C'était plutot montrer une (mauvaise) surprise et bien affirmer que addslashes n'est pas la solution, pas taper sur qui que ce soit. Il n'entre pas dans les intentions du Hub de donner un cours sur la sécurité Php pour chaque ligne de code Certes, mais pour le coup le problème soumis ici vient uniquement du manque d'échappement. Dans le code en question ce qu'il manque ce n'est pas un addslashes (qui ne résoudra rien si $Nom contient des apostraphes et/ou guillemets) mais bien un htmlspecialchars(). L'utilisation que Furious Gontran fait de ses données n'est pas renseignée. Ah ben si, tout de même : la ligne en question c'est un envoi de valeur vers un formulaire HTML. L'utilisation c'est "envoyer du HTML" pour la donnée en question, justement. la réponse fut : "fais les précéder d'un antislash". et ... c'est bien pour ça que je me permet de réintervenir : ce n'est pas une solution au problème. Pour exemple si dans ta solution code j'ai $Nom1 qui contient des apostrophes echo "<td>Nom: <input name='Aut1_Nom' type='text' id='Nom' size='31' maxlength='30' value='".addslashes($Nom1)."'></td>"; Dans sa page HTML ça va donner : <td>Nom: <input name='Aut1_Nom' type='text' id='Nom' size='31' maxlength='30' value='voici l\'exemple'></td> Le navigateur n'interprête pas le \ et le considère comme du texte brut, il arrêtera le contenu de l'attribut value à l'apparition du premier délimiteur (l'apostrophe juste après \) et la valeur sera toujours coupée au milieu. A la limite on peut faire comme dit Commmint (changer le délimiteur) et on évite le problème avec l'apostrophe mais il apparaittra si au lieu de contenir une apostrophe la valeur contient un guillemet double. Ca n'est donc pas une solution non plus. Donc oui, même mis à part la sécurité, l'unique bonne solution c'est bien un htmlspecialchars() ou un htmlspecialentities(). Et même mis à part la sécurité, une sortie sur HTML (c'est le cas ici puisque c'est un echo d'un <input>) doit toujours être échappée sinon ça cassera toujours le rendu HTML (et ce cas est un bon exemple). Addslashes c'est soit pour échapper quand on fait une sortie vers un langage qui prend cette convention d'échappement (le SQL en est un), soit pour composer avec les délimiteurs de PHP lui même dans les chaînes statiques. Jamais pour échapper un contenu vers HTML. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 3 Février 2005 Partager Posté 3 Février 2005 Désolé si j'ai pu paraitre agressif, ce n'était pas le but. C'était plutot montrer une (mauvaise) surprise et bien affirmer que addslashes n'est pas la solution, pas taper sur qui que ce soit. Je ne discutais pas sur le fond, mais sur la forme Tu as parfaitement raison, en ce sens que le htmlspecialchars() permet la transmission sans risque des quotes simples et doubles, des signes < et > et du signe & (ampersand) Il est clair que laisser ces signes tels-quels permettrait d'envoyer un <script> qui pourrait être interprété par le client. Cordialement, Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant