Ganf
jeudi 3 février 2005 à 11:54
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.
CITATION
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().
CITATION
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.
CITATION
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
CODE
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 :
CODE
<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.