web-dev-qa-db-ja.com

ログインページでのみ自動的に追加されるX-Frame-Optionsの削除

別の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>

それもうまくいきませんでした。

19
shashwat

MVC 5は自動的にX-Frame-Optionsヘッダーを追加するので、_Global.asax_ファイルに移動して、これをApplication_Start()メソッドに追加します。

_System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
_

特にログインページの場合、このヘッダーを削除することはお勧めしません。ログイン認証情報のフィッシング攻撃に対してサイトを開くためです。したがって、あなたのこのサイトが公的にアクセス可能である場合、私はこのヘッダーを保持することを強くお勧めします。

27
Florian Haider

古い質問ですが、他のユーザーが同様の質問を検索する場合は、次の解決策を使用して特定のアクションで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.csRegisterGlobalFiltersメソッドに次の行を追加します。

filters.Add(new NoIframeAttribute());

これで、すべてのアクションにヘッダーが再び追加されました。しかし、今では必要なときにそれを削除できます。必要な場所に次の行を追加するだけです。

Response.Headers.Remove("X-Frame-Options");
11