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アプリケーションでこれを処理するより良い方法はありますか?
public class XframeOptions : System.Web.Mvc.ActionFilterAttribute
ASP.NET MVC 4には異なる名前空間を持つWeb APIがあり、名前空間を明示的に指定していないため、コンパイラが間違ったクラスを選択していると思います。
System.Web.Http.Filters.ActionFilterAttribute
すべてのページで必要な場合、カスタム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>
別の方法があります。以下のようなカスタム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>
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");
}
}
NWebsecでは、web.config、OWINミドルウェア、および/またはMVCフィルター属性を介して、このヘッダーおよびその他のセキュリティヘッダーを設定できます。 https://github.com/NWebsec/NWebsec/wiki
免責事項:私はプロジェクトのメンテナーです。
すべての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>