web-dev-qa-db-ja.com

HTMLタグのみでXSSを作成することは可能ですか?

私はすべてのxssトリックを知りません。

Ruby Railsでのプログラミング中、特定のタグのみを許可する sanitizeメソッド を使用して、他のすべてのタグとスクリプトをクリアすることをお勧めします

残りのタグは

    "small", "dfn", "sup", "sub", "pre", "blockquote", "ins", "ul", "var", "samp", "del",
 "h6", "h5", "h4", "h3", "h2", "h1", "span", "br", "hr", "em", "address", "img", "kbd",
 "tt", "a", "acronym", "abbr", "code", "p", "i", "b", "strong", "dd", "dt", "dl", "ol",
 "li", "div", "big", "cite"

これらのタグの組み合わせでXSS攻撃を作成することは可能ですか?

7
Nick Ginanto

はい。ささいなことです。

<div onmouseover="alert(1)" style="position:fixed;left:0;top:0;width:9999px;height:9999px;"></div>

ただし、それを試す前に作業を保存する必要があるかもしれません。画面上でマウスを動かすと、警告が繰り返し表示される場合があります。

もちろん、より良い攻撃は、JavaScriptが呼び出されたらすぐにdivを破壊して、正当に見えるようにすることです。

これを回避するには、すべての出力をエスケープする必要があります。

16
Polynomial

はい、ほとんどすべてのHTMLタグでイベントハンドラーを宣言できます。これらのイベントの一部は、ユーザーの操作なしでページが読み込まれたときにトリガーされる可能性があります。

<img src=x onerror=alert(1) />

イベントタグは、xssをトリガーする唯一の方法ではありません。

<a href=javascript:alert(1)>xss</a>

1つの可能な解決策は、このページに コンテンツセキュリティポリシー を設定することです

X-Content-Security-Policy: unsafe-inline

実際のソリューションを必ずテストしてください。誰かの言葉をとらないでください。 (CSPも新しい)

別のオプションは PHPのHTMLPurifer で、Rubyのサニタイズよりも高度です。

14
rook

はい:<img onerror=alert(document.cookie) src=1 />

出力エスケープの要件は、ドキュメント内の場所によって異なります。 HTML属性に含めることを意図したテキストは、別の方法でエスケープする必要があります('")HTML要素(<>)、 例えば。 OWASP Enterprise Security API (ESAPI)は、さまざまなコンテキストすべてにエスケープメカニズムを提供するため、これを処理するための優れた方法です。 Rubyバージョンが見つかります Github上

2
bonsaiviking

多数のHTML XSS攻撃を含む優れた「チートシート」については、こちらを参照してください。 OWASP.org 彼らは非常に独創的になります。このシートを使用して、サイトが構築されたときにサイトをテストし、リストが更新されたときに時々チェックすることは価値があります。

それが役に立てば幸い!

2
NULLZ