web-dev-qa-db-ja.com

HTML属性内の引用符を正しいエスケープする方法

値の文字列に引用符が含まれていると壊れてしまいます。

値は"asdですが、DOMでは常に空の文字列として表示されます。

私は文字列を適切にエスケープすることを私は知っているあらゆる方法を試みましたが、役に立ちません。

<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>

ポストバックメッセージに正しい値が含まれるようにページ上にこれをレンダリングする方法がありますか。

221
Chris

&quot;が正しい方法です。テストの3番目です。

<option value="&quot;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="&quot;asd">Test</option>
</select>

あるいは、属性値を一重引用符で区切ることができます。

<option value='"asd'>test</option>
299
Andy E

PHPを使用している場合は、 htmlentities または htmlspecialchars functionを呼び出してみてください。

14

--- HTML構文 、さらに HTML5 によると、以下はすべて有効なオプションです。

<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>
<option value='"asd'>test</option>
<option value='&quot;asd'>test</option>
<option value='&#34;asd'>test</option>
<option value=&quot;asd>test</option>
<option value=&#34;asd>test</option>

XML構文 を使用している場合は、引用符(一重または二重)が必要です。

これは上記の作業のすべてを示すjsfiddleです

9
aij

別の選択肢として、二重引用符を一重引用符で置き換えても構いません。しかし、私はこれについて言及しません:

<option value='"asd'>test</option>

私はこれに言及します:

<option value="'asd">test</option>

私の場合、私はこの解決策を使いました。

7
csonuryilmaz

あなたは本当に信頼できないデータのみを以下のような良い属性のホワイトリストに入れるべきです:マージン高さ、マージン幅、複数、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

0
Jim Manico