4

コード例:

<!DOCTYPE html>
<html lang="en">
<head><title>XSS test page</title></head>
<body>
<p>
<?php
  $style = htmlspecialchars($_GET['style']);
  echo '<div style="'.$style.'">This is a style test</div>';
?>
</p>
</body>
</html>

適切にエスケープされた html スタイル属性だけを使用して JavaScript コードを挿入することは可能でしょうか?

CSS ( Source 1Source 2 )を介して XSS 攻撃をトリガーできると聞いたことがあります。

スタイル属性だけでこれが可能かどうか疑問に思っていました。

4

2 に答える 2

8

これは質問のコメント欄ですでに指摘しましたが、実際の回答としてはより適切だと思います。

CSS

実際の XSS の脅威とは別に、ユーザー入力をページのスタイル タグに渡すことで、攻撃者にとって他の一連の機会が開かれます。中には単純な css を使用するだけのものもあります。

要素を に設定するとposition: absolute;、ページ全体をオーバーレイできます。opacity:0;これは、(たとえば)使用不能にするために使用される可能性があります。または、攻撃者がページ全体の改ざんに使用する可能性があります。:beforeやのような CSS3 プロパティを使用する:afterことで、CSS を介してページにコンテンツを配置することもできます。

もう 1 つの結果は「クリックジャッキング」である可能性があります。これは、実際にはStackOverflow ですでに議論されています。

XSS

純粋な XSS に関して言えば、最新のブラウザーでこれを使用するのは難しいでしょうが、それでも不可能とは言えません。とにかく、Internet Explorer 7 などの古いブラウザでは、これが攻撃に使用される可能性があります。非常に独創的な XSS インジェクションがあり、難読化され、最もクレイジーな方法でデコードされて、入力検証を裏切りました。これは、いくつかの (現在の) 古いブラウザーではまだ解析中であるため、依然として成功します。これを考慮して、最新のブラウザーでは問題が大幅に改善されました。

さらに、 や などの関数がexpression()ありbackground-image:url、古いバージョンの Firefox、IE7 以前、およびおそらく他のブラウザーの CSS でスクリプトの実行が可能になりました。

OWASP XSS 防止のチート シートには実際に、これらの関数が style - tags および style - 属性で使用される例がリストされています。

スクリプトレス攻撃(最新のブラウザーでも機能する可能性があります!)

古いブラウザーと XSS はさておき、ここで適用できる可能性のある方法は他にもあります。主に「スクリプトレス攻撃」の形です。詳細に入ると範囲が広がりますが、このトピックに関する優れたプレゼンテーションがあり、最新のブラウザーでさえどのように影響を受けるかについてのいくつかの方法と良い例を提供しています. もう 1 つの例は、CSS がクロス サイト リクエスト フォージェリに使用されたこのブログ投稿です。(リンクを提供してくれた @BenjaminGruenbaum に感謝します)

最後に、スクリプトの挿入に関して非常に巧妙な攻撃者がどのように取得できるかについての優れた洞察については、http: //www.thespanner.co.uk/ を参照することをお勧めします。たとえば、「IE7 および Firefox (バージョンは指定されていません)」で動作すると述べられている style-attribute での XSS のかなりワイルドな例さえあります。

だから、そのようなことをするときは本当によく気をつけてください、人々はまだ道を見つけるかもしれません...

于 2013-03-21T00:33:00.370 に答える
1

ブラウザによって異なります。たとえば、IEには、expressionキーワードを介したCSSおよびスタイルタグ内のスクリプトがありました。ありがたいことに、これはIE8でなくなりました。

私の限られたPHPの知識から、あなたがしていることは問題ありません。htmlspecialchars()は、引用符で囲まれた属性値に使用すると機能します。引用符を外してやっ<div style='.$style.'>た場合は、問題の世界にいます。

于 2013-03-20T23:24:08.093 に答える