2011-01-06 8 views
4

文字列がXSS(クロスサイトスクリプティング)セキュリティリスクであるかどうかを判断するために使用できる正規表現とは何ですか?XSS正規表現

+0

文脈は、コード生成文字列にXssと見なされるテキストが含まれているかどうかを判断する必要があることです。私はウェブ上でいくつかの例を見てきましたが、誰かが試して検証した正規表現を持っているかどうか知りたいのですが、私は借りることができますか? – Phil

答えて

5

文字列が使用されているコンテキストによって異なります。例えば

、文字列は特殊なHTML文字は"><そして、HTMLページの一部としてプリントアウトされている、と'は、潜在的にXSSの危険することができます。

JSON経由で渡された場合、'"はXSSの危険性があります。

SQLステートメントに含まれている場合(少なくとも実際にはパラメータ化されたクエリを使用しないでください)、;やバッククックなどの問題が発生する可能性があります。

等が挙げられる。

+1

XSSがまだ問題であるということをすべて行っても、注意が必要です。 – rook

0

ユーザーデータから生成されたhtml内のエンコードされていない<文字を探します。 <文字がないと、あなたのサイトに厄介なHTMLが注入されることはありません。

ユーザーが生成した書式設定を許可する場合は、許可されたhtmlをサブセットに制限します。これを正規表現で確認することは不可能なので、代わりに良いhtmlパーサをお勧めします。

+0

ユーザーが生成した書式設定を有効にする標準的な方法は、すべてのタグを無効にし(すべての角かっこをhtmlエンコードして)、次に許可するタグを「追加」することです。 @marcogが示唆しているように、これを行うためのフレームワークはすでにありますが、それはもともと考えられていたよりも難しい作業です。 – Andrew

+0

Markdown(StackOverflowが使用するもの)やBBCode(タグベースのシステムが好きな人)のようなHTML以外の書式設定マークアップを使用すると、安全でないHTMLタグを気にする必要がなくなります。 – Amber

+0

@Amber生成されたhtmlが安全であるように注意する必要があります。機能からエンコード/デコード/翻訳機能にバウンスするものがあるときは、スリップアップを見つけるのは難しいでしょう。 – marcog

3

xssのすべてを停止するための防弾機能はありません。正規表現は最善の選択ではありません。 XSSは、ページ上のどこに限定されていますか?"'<>のような制限守秘師は良いスタートですが、決して包括的な解決策ではありません。これらの文字を停止してもMANY other ways of exploiting XSS.悪意のあるhrefがあります:javascript:alert(/xss/)とイベントハンドラの注入:onload=alert(/xss/)、4文字をフィルタリングすると停止するnetherがあります。

HTMLPurifierは、文字通り何千もの正規表現で構成され、常にバイパスされます。