Comment éviter correctement les guillemets dans les attributs html?
j'ai une chute vers le bas sur une page web qui se casse lorsque la chaîne de valeur contient une citation.
la valeur est "asd
mais dans le DOM apparaît toujours comme une chaîne vide.
j'ai essayé toutes les façons que je sais pour échapper à la corde correctement, mais en vain.
<option value=""asd">test</option>
<option value=""asd">test</option>
<option value=""asd">test</option>
<option value=""asd">test</option>
avez-vous une idée de la façon de rendre ceci sur la page pour que le message postback contienne la valeur correcte?
6 réponses
"
est le bon chemin, le troisième de vos tests:
<option value=""asd">test</option>
vous pouvez voir ce travail ci-dessous, ou sur jsFiddle .
alert($("option")[0].value);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option value=""asd">Test</option>
</select>
alternativement, vous pouvez délimiter la valeur de l'attribut avec des guillemets simples:
<option value='"asd'>test</option>
si vous utilisez PHP, essayez d'appeler htmlentities
ou htmlspecialchars
fonction.
par syntaxe HTML , et même HTML5 , les options suivantes sont toutes valides:
<option value=""asd">test</option>
<option value=""asd">test</option>
<option value='"asd'>test</option>
<option value='"asd'>test</option>
<option value='"asd'>test</option>
<option value="asd>test</option>
<option value="asd>test</option>
notez que si vous utilisez la syntaxe XML , les guillemets (simple ou double) sont requis.
une autre option consiste à remplacer les guillemets doubles par des guillemets simples si cela ne vous dérange pas. Mais je ne parle pas de celui-ci:
<option value='"asd'>test</option>
je mentionne celui-ci:
<option value="'asd">test</option>
Dans mon cas, j'ai utilisé cette solution.
vous ne devriez vraiment permettre des données non fiables dans une liste blanche de bons attributs comme: align, alink, alt, bgcolor, border, cellpadding, cellspacing, class, color, cols, colspan, coords, dir, face, height, hspace, ismap, lang, marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, scrolling, shape, span, summary, tabindex, title, usemap, valign, value, vlink, VSpace, largeur
Vous voulez vraiment garder non fiables les données des gestionnaires javascript ainsi que les attributs id ou name (ils peuvent bloquer d'autres éléments dans le DOM).
aussi, si vous mettez des données non fiables dans un attribut SRC ou HREF, alors c'est vraiment une URL non fiable, donc vous devriez valider L'URL, assurez-vous que ce N'est pas une URL javascript:, et puis l'entité HTML encoder.
plus de détails ici: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet
il n'y a aucun moyen d'échapper aux guillemets dans la valeur d'un texte d'entrée... mais vous pouvez utiliser javascript (ou jquery):
<input type="input" name="myinput" id="myinput" value="" />
<script>document.getElementById("myinput").value="This input has a [\"]";</script>