値の文字列に引用符が含まれていると壊れてしまいます。
値は"asd
ですが、DOMでは常に空の文字列として表示されます。
私は文字列を適切にエスケープすることを私は知っているあらゆる方法を試みましたが、役に立ちません。
<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value=""asd">test</option>
<option value=""asd">test</option>
ポストバックメッセージに正しい値が含まれるようにページ上にこれをレンダリングする方法がありますか。
"
が正しい方法です。テストの3番目です。
<option value=""asd">test</option>
これは以下のように動作するか、または 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>
あるいは、属性値を一重引用符で区切ることができます。
<option value='"asd'>test</option>
PHPを使用している場合は、 htmlentities
または htmlspecialchars
functionを呼び出してみてください。
--- HTML構文 、さらに HTML5 によると、以下はすべて有効なオプションです。
<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>
XML構文 を使用している場合は、引用符(一重または二重)が必要です。
別の選択肢として、二重引用符を一重引用符で置き換えても構いません。しかし、私はこれについて言及しません:
<option value='"asd'>test</option>
私はこれに言及します:
<option value="'asd">test</option>
私の場合、私はこの解決策を使いました。
あなたは本当に信頼できないデータのみを以下のような良い属性のホワイトリストに入れるべきです:マージン高さ、マージン幅、複数、nohref、noresize、noshade、nowrap、ref、rel、rev、行、rowspan、スクロール、図形、スパン、要約、tabindex、タイトル、usemap、valign、値、vlink、vspace
信頼できないデータは、IDや名前の属性だけでなく、JavaScriptのハンドラからも排除したい(DOMの他の要素を破壊する可能性があります)。
また、信頼できないデータをSRCまたはHREF属性に入れる場合は、実際には信頼できないURLなので、URLを検証する必要があります。そのURLをjavascriptではなく、次にHTMLエンティティでエンコードしてください。
ここにすべてのより多くの詳細がここにあります: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet