別のWebサイトのiframe
内にロードする必要があるASP.NET MVCアプリケーションを開発しています。ただし、iframe
に設定されているレスポンスX-Frame-Options
でヘッダーが送信されるため、ログインページはSAMEORIGIN
内に表示されません。このため、ブラウザはiframe
のページを表示していません。私はすでにグーグルで複数のことを試しましたが、何もうまくいきませんでした。
ASP.NETフォーム認証を使用しています。 IISは、セキュリティを強化するためにログインページにこのヘッダーを追加します。ただし、使用例ではこれを取り除く必要があります。
カスタムヘッダーを追加してみました
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="ALLOW" />
</customHeaders>
</httpProtocol>
しかし、SAMEORGIN
はまだカンマでヘッダーに追加されています。
また、Response.Headers["X-Frame-Options"] = "ALLOW"
を使用してC#からヘッダー値を追加してみました。同じ名前の2つのヘッダーが発生します。
私もこれをweb.configで試しました
<customHeaders>
<remove name="X-Frame-Options" />
</customHeaders>
それもうまくいきませんでした。
MVC 5は自動的にX-Frame-Optionsヘッダーを追加するので、_Global.asax
_ファイルに移動して、これをApplication_Start()
メソッドに追加します。
_System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
_
特にログインページの場合、このヘッダーを削除することはお勧めしません。ログイン認証情報のフィッシング攻撃に対してサイトを開くためです。したがって、あなたのこのサイトが公的にアクセス可能である場合、私はこのヘッダーを保持することを強くお勧めします。
古い質問ですが、他のユーザーが同様の質問を検索する場合は、次の解決策を使用して特定のアクションでX-Frame-Options
を削除できます。
まず、このコードをApplication_Start
のメソッドGlobal.asax.cs
に追加します(@Florian Haiderが言ったように):
System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
すべてのアクションのヘッダーを抑制します。次のコードを含むNoIframeAttribute.cs
という名前の新しいファイルを追加します。
using System.Web.Mvc;
namespace MyApplication
{
public class NoIframeAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Headers.Set("X-Frame-Options", "SAMEORIGIN");
}
}
}
FilterConfig.cs
のRegisterGlobalFilters
メソッドに次の行を追加します。
filters.Add(new NoIframeAttribute());
これで、すべてのアクションにヘッダーが再び追加されました。しかし、今では必要なときにそれを削除できます。必要な場所に次の行を追加するだけです。
Response.Headers.Remove("X-Frame-Options");