しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC 5 では X-Frame-Options が自動で出力される時がある

タイトルの通り、ASP.NET MVC 5 では X-Frame-Options: SAMEORIGIN が自動で出力される時があります。

f:id:shiba-yan:20131019104005p:plain

出力される条件ですが、Html.AntiForgeryToken を使った時になります。AntiForgeryToken は Web Pages の CSRF 対策クラスを使っているので、Web Pages でも同様の挙動になるはずです。

このヘッダーの機能に関しては以下を参照してください。

X-Frame-Options レスポンスヘッダ - HTTP | MDN

大抵の場合は登録フォームなどで AntiForgeryToken ヘルパーを使うと思うので、クリックジャッキング対策として X-Frame-Options: SAMEORIGIN を出力するのは多少セキュアになるとは思います。

しかし、Facebook アプリを ASP.NET MVC で開発していた場合には、5 にアップデートすると特定のページだけ動作しなくなります。Facebook アプリは facebook.com ドメインから iframe で表示されるため、X-Frame-Options: SAMEORIGIN が指定されているとブロックされるからです。

という訳で、設定を変更して出力しないようにしてしまいます。AntiForgeryConfig クラスに SuppressXFrameOptionsHeader プロパティが追加されているので、true にすると出力されなくなります。

// X-Frame-Options: SAMEORIGIN を出力しない
AntiForgeryConfig.SuppressXFrameOptionsHeader = true;

設定して試してみたところ、ちゃんと出力されていませんね。

f:id:shiba-yan:20131019104849p:plain

これを Global.asax.cs の Application_Start にでも書いておくと MVC 4 と同様の挙動になります。

互換性に影響する部分なんですけど、リリースノートには全く記載されていなかったので焦りました。ソース読め、ソースということですね。