私はできるコードの一部を持っています
[url]someurl[/url]
BBコードとそれを置き換える
<a href="someurl">someurl</a>
XSSを防ぐには2つの予防策が必要です。
<
を使用して、>
、"
、str_replace
を置き換えます。javascript:
およびdata:
プロトコルハンドラーを検出します。ブラウザは属性値をさらに解釈する前にデコードするため、[url]j ... [/url]
を使用してURLをエンコードすることにより、正規表現チェックを回避できます。
だから私は得る:
<a href="javascript:alert(1)">javascript:alert(1)</a>
短い話:私は、steenkin属性タグ以上のものを求めています(そのようなリンクをクリックするのは誰ですか?!)
"
、<
などを何らかの方法でエンコードして、str_replace
で置き換えられないようにしても、HTMLのコンテキストで解釈されますか?
ブラックリストのアプローチには常に欠陥があります。たとえば、Internet Explorerでは、vbscript:
URIを使用してvbscriptコードを実行できます。このチェックをバイパスするためにjavascript:
をエンコードする方法もあります。ブラウザからiTunesを悪用するためにiTunes:
URIに依存する多数のiTunesの悪用がありました。これは2つの例にすぎませんが、実際には、ターゲットシステムに登録されたURIハンドラが存在する可能性があります。
Htmlencodeルーチンを使用してこれを実行し、すべての引用符と山かっこをエンコードします。これの利点は、URLが損傷を受けることなく、合法的に引用符を含むことができることです。これは、ブラウザが読み込まれると、すべての属性値のhtmlデコードを自動的に実行するためです。次に、最初の4文字がhttp
であることを強制します。文字列がhttp://
またはhttps://
で始まらない場合は、先頭にhttp://
を追加します
ただし、次のようなリンクをクリックするように誰かをだますことができます。
UTF7エンコーディング 回避を試すこともできますが、最新のブラウザではサポートされなくなりました。