web-dev-qa-db-ja.com

二重引用符で属性を区切る

私はできるコードの一部を持っています

[url]someurl[/url] 

BBコードとそれを置き換える

<a href="someurl">someurl</a>

XSSを防ぐには2つの予防策が必要です。

  1. 単純な<を使用して、>"str_replaceを置き換えます。
  2. 正規表現を使用して、javascript:およびdata:プロトコルハンドラーを検出します。

ブラウザは属性値をさらに解釈する前にデコードするため、[url]&#x6A ... [/url]を使用してURLをエンコードすることにより、正規表現チェックを回避できます。

だから私は得る:

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

短い話:私は、steenkin属性タグ以上のものを求めています(そのようなリンクをクリックするのは誰ですか?!)

"<などを何らかの方法でエンコードして、str_replaceで置き換えられないようにしても、HTMLのコンテキストで解釈されますか?

3
er4z0r

ブラックリストのアプローチには常に欠陥があります。たとえば、Internet Explorerでは、vbscript: URIを使用してvbscriptコードを実行できます。このチェックをバイパスするためにjavascript:をエンコードする方法もあります。ブラウザからiTunesを悪用するためにiTunes: URIに依存する多数のiTunesの悪用がありました。これは2つの例にすぎませんが、実際には、ターゲットシステムに登録されたURIハンドラが存在する可能性があります。

Htmlencodeルーチンを使用してこれを実行し、すべての引用符と山かっこをエンコードします。これの利点は、URLが損傷を受けることなく、合法的に引用符を含むことができることです。これは、ブラウザが読み込まれると、すべての属性値のhtmlデコードを自動的に実行するためです。次に、最初の4文字がhttpであることを強制します。文字列がhttp://またはhttps://で始まらない場合は、先頭にhttp://を追加します

7
rook
0
Cristian Dobre