安全でない可能性のあるデータをエンコードする場合、>
をエンコードする理由はありますか?
attr="data"
、attr='data'
、<tag>data</tag>
の場合)誰かがこれをする理由は
<[^>]+>?
(まれ)attr=data
。 :-o(起きていない!)何か不足していますか?
厳密に言えば、HTMLインジェクションを防ぐには、<
を<
としてエンコードするだけです。
ユーザー入力を属性に入れる場合は、"
も"
としてエンコードします。
正しく処理を行い、適切に引用符で囲まれた属性を使用している場合、>
について心配する必要はありません。ただし、これがわからない場合は、安心のためにエンコードする必要があります-害はありません。
セクション5.3.2の HTML4 仕様には、
著者は「
>
"(ASCII 10進数62)"> "の代わりにテキストで
だから私はあなたがエンコードする必要があると信じています大きい>
として署名>
(標準に従う必要があるため)。
現在のブラウザのHTMLパーサーは、引用符で囲まれていない>
s
ただし、残念ながら、JSで "parse" HTMLに正規表現を使用することは非常に一般的です。 (例: Ext.util.Format.stripTags )。また、適切に記述されていないコマンドラインツール、IDE、またはJavaクラスなどは、開始タグのリミッターを決定するほど洗練されていない可能性があります。
そのため、次のようなコードで問題が発生する可能性があります。
<script data-usercontent=">malicious();//"></script>
(構文ハイライターがこのスニペットをどのように扱うかに注意してください!)
はい、サインがエンコードされていない場合、フォームソーシャルメディアや他の多くのサイトでxssが許可されるため、攻撃者は<script>
タグ。サインを解析すると、ブラウザはそれを実行せず、代わりにサインを表示します。
これは、 [〜#〜] xss [〜#〜] インジェクションを防ぐためです(フォームを使用して生のHTMLまたはJavaScriptを送信するユーザーを介して)。出力をエスケープすることにより、ブラウザーはそのいずれも解析または実行しないことを認識します。テキストとしてのみ表示します。
ユーザー入力に基づく動的な出力を処理していない場合、これは問題の少ないように感じるかもしれませんが、良い習慣を作らないためには、少なくとも理解することが重要です。