web-dev-qa-db-ja.com

HTML:より大きいかどうかをエンコードする必要がありますか? (> gt;)

安全でない可能性のあるデータをエンコードする場合、>をエンコードする理由はありますか?

  • それ 検証 どちらの方法でも。
  • ブラウザはどちらの方法でも同じように解釈します(attr="data"attr='data'<tag>data</tag>の場合)

誰かがこれをする理由は

  • 正規表現ベースのタグ削除を簡素化するため。 <[^>]+>?(まれ)
  • 引用符で囲まれていない文字列attr=data:-o(起きていない!)
  • コードの美学。 (だから何?)

何か不足していますか?

42
Bryan Field

厳密に言えば、HTMLインジェクションを防ぐには、<&lt;としてエンコードするだけです。

ユーザー入力を属性に入れる場合は、"&quot;としてエンコードします。

正しく処理を行い、適切に引用符で囲まれた属性を使用している場合、>について心配する必要はありません。ただし、これがわからない場合は、安心のためにエンコードする必要があります-害はありません。

36

セクション5.3.2の HTML4 仕様には、

著者は「&gt; "(ASCII 10進数62)"> "の代わりにテキストで

だから私はあなたがエンコードする必要があると信じています大きい>として署名&gt;(標準に従う必要があるため)。

16

現在のブラウザのHTMLパーサーは、引用符で囲まれていない>s

ただし、残念ながら、JSで "parse" HTMLに正規表現を使用することは非常に一般的です。 (例: Ext.util.Format.stripTags )。また、適切に記述されていないコマンドラインツール、IDE、またはJavaクラスなどは、開始タグのリミッターを決定するほど洗練されていない可能性があります。

そのため、次のようなコードで問題が発生する可能性があります。

<script data-usercontent=">malicious();//"></script>

(構文ハイライターがこのスニペットをどのように扱うかに注意してください!)

4

はい、サインがエンコードされていない場合、フォームソーシャルメディアや他の多くのサイトでxssが許可されるため、攻撃者は<script>タグ。サインを解析すると、ブラウザはそれを実行せず、代わりにサインを表示します。

0
coder

常に

これは、 [〜#〜] xss [〜#〜] インジェクションを防ぐためです(フォームを使用して生のHTMLまたはJavaScriptを送信するユーザーを介して)。出力をエスケープすることにより、ブラウザーはそのいずれも解析または実行しないことを認識します。テキストとしてのみ表示します。

ユーザー入力に基づく動的な出力を処理していない場合、これは問題の少ないように感じるかもしれませんが、良い習慣を作らないためには、少なくとも理解することが重要です。

0
mrlee