2

JavaScript で、すべての「より小さい」(「<」) 文字を除外して結果を HTML として表示すると、いたずらを引き起こす既知の文字列はありますか?

var str = GetDangerousString().toString();
var secure = str.replace(/</g, '');

$('#safe').html(secure); // or
document.getElementById('safe').innerHTML = secure;

この質問は、特に ID のサニタイズに対応しています。一般的な HTML 文字列を探しています。理想的な答えは、コードやその他の潜在的に危険な要素を挿入する文字列の最も単純な実例です。

4

1 に答える 1

0

これだけでは十分ではありません... エンド ユーザーが編集できるようにするページに埋め込む HTML は、HTML エンコードする必要があります。それ以外の場合は、サニタイズする必要があります。

詳細については、Owasp サイトを参照してください。

編集:あなたのコメントに応えて、私は100%確信が持てません. 注意しないと、場合によっては二重エンコードが発生するようです。

https://www.owasp.org/index.php/Double_Encoding

たとえば、そのページの次の文字列は、「<」文字を隠すエクスプロイトを示していると想定されています。

%253Cscript%253Ealert('XSS')%253C%252Fscript%253E

また、次の表に示すように、HTML では文字 "<" をさまざまな方法でエンコードできます。

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Character_escape_sequences

私にとって、それは注意すべきことです - 理解するのが難しい悪用可能なケースがあるかもしれないという事実は、あなたを開いたままにするかもしれません.

元の質問に戻りますが、「<」文字を含まない HTML としてレンダリングされる HTML の例を教えてください。ユーザーが使用できるようにする HTML を「id」で理解しようとしています。

また、サイトが小規模で、サイトの一部 (特にページでの JavaScript の使用方法) を書き換える可能性がある場合は、コンテンツ セキュリティ ポリシーを使用してユーザーを XSS から保護することを検討できます。これは、ほとんどの最新のブラウザーで機能し、この手順を実行すると、多くのユーザーを XSS 攻撃から保護できます。

于 2015-12-25T01:34:41.100 に答える