2012-07-14 9 views
5

特定のページのJavascriptを無効にするHTTPヘッダーはありますか? 私のウェブサイトは、ユーザが生成したHTMLコンテンツを配信します(そのため、私はhtmlenititiesを使うことができません)。スクリプト(JavaScriptインジェクション)を防止したいと思います。特定のページでJavascriptの実行を無効にする(HTML/PHP)

私はすでに、メインドメインでのみ認証用に設定されているHttpOnly-Cookieを使用していますが、ユーザーのコンテンツはCookieを読み取れないサブドメインにのみ表示されます。 JavaScriptを実行するには余りにも多くの可能性が残っているという問題があります。例えば、onclickなどのイベント属性を使用するなど、Internet ExplorerはCSSでJavaScriptの実行を許可するプロパティを持っています(expression)。私が読んだ別の興味深いアイデアは、コードを次のようにブロックするために例外をスローすることでした。 もう1つの考え方は、すべての許可されたタグを含むリストを定義することです。さらに、許容される各属性名を持つ配列を作成することもできますが、これは非常に難しい作業です。

私はこの問題を抱える唯一の人ではないと思いますので、誰もが可能性を知っていますすべて可能性のある有害なコード - 少なくとも現代のブラウザでは?

X-Scripting: disabledに類似した単純な架空のヘッダーは、人生をはるかに簡単にするでしょう!

+0

あなたは 'script'タグとユーザー入力の特定の属性をブロックすることを考えたことがありますか? –

+0

それは私が意味することです: "もう一つの考えは、許可されたすべてのタグを含むリストを定義することです。さらに、許容される各属性名を持つ配列を作成することは非常に難しい作業です。 (例えば、私は例えば "div"や "span"のような無害なタグを許可し、 "onclick"、 "onmouseover"のような属性を無効にしますが、ブラウザにはブラウザ固有の属性とプロパティが異なるのですべての注入をカバーしません) –

答えて

2

はい、Content Security Policyと呼ばれる実験的なHTTPヘッダーがあります。これにより、JavaScriptがどこから来るのかを制御できるため、XSSを不可能にすることができます。ただし、現在のところ、ChromeとFirefoxでのみサポートされています。

HttpOnlyクッキーを有効にすることをお勧めしますが、これは正確にのZEROの攻撃を防ぎます。 reading CSRF tokens, and carrying out requests with an XHRでXSSを悪用することはできます。

XSSを入手するには多くの方法があり、脆弱性スキャナーのように(ほぼ)すべてが見つかります。 Skipfishは、オープンソースの脆弱性スキャナであり、非常にプリミティブですが、無料です。これは、ほとんどのWebアプリケーションが広範に広がっている脆弱性をどのように処理しているかです(私はSheildSealに勤務しており、脆弱性スキャナを構築するのを手助けしています。)

問題が見つかったらhtmlspecialchars($var)またはhtmlspecialchars($var,ENT_QUOTES)を使用して入力をサニタイズしてください。 ENT_QUOTESは、攻撃者がonclickまたは他のJavaScriptイベントを導入するのを防ぐことができます。

+0

HTMLコンテンツを生成するのに、動的なクライアント側のコードを実行することなく、できるだけ自由にすべきであるという問題のみです。 SQLインジェクションまたはPHPインジェクションは、コードが.phpファイルではなくデータベースに格納され、すべてのパラメータがSQL文で使用される前にクリーンアップされるため、問題ではありません。例えば、 'img'タグの' src'のような属性が必要な場合、単純に 'ENT_QUOTES'を使うことはできませんし、すべての入力をサニタイズすることはできません。しかし、少なくともFirefox/Chrome-Usersのために私のサイトを安全にするために、コンテンツセキュリティポリシーについてもっと詳しく読む予定です。 –

+0

@Birk oah私はそれを間違って読んだら、HTMLPurifierを使いたいと思っています。また、通常は使用時に消毒する必要がありますので、xssの出力をサニタイズしてください。しかし、HTMLPurifierは多くのリソースを使用しているため、データベースに挿入する前にそれを使用してください。 – Mikey

+0

@Birk、HTML/CSSを安全に埋め込むためのGoogle Cajaプロジェクトをチェックしたいと思うかもしれません。 https://developers.google.com/caja/ – JackWink