web-dev-qa-db-ja.com

MVC 4アプリケーションのすべてのページにX-Frame-Optionsヘッダーを追加する

X-Frame-Optionsヘッダー(値を "DENY"に設定)をMVC 4アプリケーションに追加しようとしています。周りを見てみると、 this がすべてのページに追加する最もクリーンな方法です。

ただし、このコードを追加してもビルドされません。のOnResultExecutingにエラーがあります

"オーバーライドする適切なメソッドが見つかりません。"

public class XframeOptions : ActionFilterAttribute
{
    public override void OnResultExecuting(
          System.Web.Mvc.ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.AddHeader(
            "X-Frame-Options", "DENY");
    }
}

これが最もクリーンな方法である場合、このエラーを解決するにはどうすればよいですか? MVC 4アプリケーションでこれを処理するより良い方法はありますか?

40
Xaxum

correct class

public class XframeOptions : System.Web.Mvc.ActionFilterAttribute

ASP.NET MVC 4には異なる名前空間を持つWeb APIがあり、名前空間を明示的に指定していないため、コンパイラが間違ったクラスを選択していると思います。

System.Web.Http.Filters.ActionFilterAttribute
14
Darin Dimitrov

すべてのページで必要な場合、カスタムHttpModuleまたはActionFilterは必要ありません。 https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options はるかに簡単なソリューションの詳細:

X = Frame-Optionsヘッダーを送信するようにIISを構成するには、これをサイトのWeb.configファイルに追加します。

<system.webServer>
  ...

  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>

  ...
</system.webServer>
124
robrich

別の方法があります。以下のようなカスタムHttpModuleを作成します。

    public class XframeOptionsModule : IHttpModule
{
    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += this.OnPreSendRequestHeaders;
    }
    private void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        HttpContext.Current.Response.AddHeader("x-frame-options", "Deny");
    }
}

次に、このモジュールをweb.configに登録します

    <modules >
        <add name ="XframeOptions" type="your module's full type info"/>
    </modules>
6
shimron

OnResultExecutingではなく間違ったメソッド名を使用しているため、このエラーが発生しています。OnResultExecutedを使用してください。次のようにメソッドを記述する必要があります。

public class XframeOptionsFilter : System.Web.Mvc.ActionFilterAttribute
{
    public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.AddHeader("x-frame-options", "Deny");
    }
}
4
Vikas Kumar

NWebsecでは、web.config、OWINミドルウェア、および/またはMVCフィルター属性を介して、このヘッダーおよびその他のセキュリティヘッダーを設定できます。 https://github.com/NWebsec/NWebsec/wiki

免責事項:私はプロジェクトのメンテナーです。

1
klings

すべてのMVCアプリに「x-frame-options」拒否ヘッダーを追加するには、以下を実行してクリックジャック攻撃を回避できます。

using System;
using System.Web;

namespace Demo.Website.Modules
{
    public class XfoHeaderModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += ContextPreSendRequestHeaders;
        }

        public void Dispose()
        {
        }

        private void ContextPreSendRequestHeaders(object sender, EventArgs e)
        {
            HttpContext.Current.Response.Headers.Add("X-Frame-Options", "Deny");
        }
    }
}

以下をweb.configに追加します

  <system.webServer>
    <modules>
      <add name="XfoHeader" type="Demo.Website.Modules.XfoHeaderModule" />
    </modules>
  </system.webServer>

enter image description here

0
Diganta Kumar