![]() |
Windows Internet Explorer 8 |
WebアプリケーションやWebサイトは高機能になり、そして複雑なものになりつつある。こうしたケースではプラットフォームのコンポーネント、コンポーネント上に構築されたサーバアプリケーション、ブラウザで実行されるJavaScriptなど、さまざまな要素が絡み合い、どの部分がどのセキュリティの責任を負うべきかの判断が難しくなってくる。
Rely on Declarative Security Features in the Browser - IEBlogでは、Webアプリケーションを開発する場合には「宣言型セキュリティ機能」を使うべきだと主張している。複雑なシステムであってもセキュリティはすべての部分で負うべきであり、そうしたケースでは責任のなすりつけ合いが発生する可能性があるという。宣言型セキュリティ機能を活用すれば、設計の段階でセキュリティの責任を明確なものにすることができるという。
紹介されているIEが提供する宣言型セキュリティ機能は次のとおり。こうした機能を積極的に活用しようということになる。
- X-FRAME-OPTIONS - 他のサイトからframe/iframeを経由して参照されるのを禁止する機能。クリックジャックへの対策となる。IE8以上でサポート。
- Cookie.Secureプロパティ - HTTPS経由でのみクッキーを送信するための指定。中間車攻撃によるクッキーの奪取への対策となる。サポートされるすべてのIEでサポート。
- HttpOnly - クライアントコードからクッキーへのアクセスを禁止する機能。XSS攻撃によるクッキーベースセッションIDの奪取への対策となる。IE6以上でサポート。
- toStaticHTML - 悪意ある要素をHTMLから削除する機能。IE8以上でサポート。
- SECURITY=RESTRICTEDフレーム - フレームにおけるスクリプトの実行を禁止する機能。IE6以上でサポート。
Rely on Declarative Security Features in the Browserでは宣言型セキュリティの例としてpostMessage()を紹介。postMessage()はクロスドメインでメッセージをやりとりするための機能。IE8からサポートされている。この場合の宣言型セキュリティは、postMessage()のtargetOriginパラメータにワイルドカードを指定せずに、明示的にドメインを指定することを意味するという。ワイルドカードを指定した場合にはチェックなしでメッセージが送信されるため、なんらかの脆弱性を突かれてメッセージがリークする可能性がある。ワイルドカードを使用せず明示的に記述することで、そうした潜在的な危険性を回避できるというわけだ。
