Asp.net5 MVC6 下的点击劫持证明?
Clickjacking proof under Asp.net5 MVC6?
之前我总是添加add name="X-Frame-Options" value="DENY" or "SAMEORIGIN"
在 Web.config 中的 CustomHeaders 下,但它已经消失了。知道如何做这个 asp5 mvc6 吗?
Web.config
没有消失。它已从项目根目录移至 /wwwroot
文件夹。 IIS 仍然依赖于这些设置,包括您提到的 X-Frame-Options
设置,它适用于所有请求,而不仅仅是传递给 MVC 的请求。但是,如果您不打算在 IIS 下托管您的应用程序,您可能需要寻找其他方法来启用这些设置。
我刚刚测试并验证了将此部分放入 /wwwroot/web.config
文件会在 IIS express 上添加 header。
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
</customHeaders>
</httpProtocol>
我认为选项取决于您的环境,如果您使用 IIS,那么您可以使用 NightOwl 的答案并将其修复在 web.config,这在 Azure 中也适用,因为 Kestrel 是 运行 IIS 后面有。否则我认为您需要添加自定义中间件,将此 header 添加到响应中(或者某些现有的中间件可以做到这一点,但我不知道...)
如果您想同时兼容 IIS 和 Kestrel(因此 linux),您显然不能使用 config。您将不得不使用中间件。在您的中间件中,您可以将 context.Response.OnStarting()
委托挂接到 Invoke() method
.
中
例如,Exception middleware 就是这样做的,因此您可以像这样复制该模式(在注释中编码,而不是 VS)
public class SetHeadersMiddleware
{
private readonly RequestDelegate _next;
private readonly SetHandlersMiddlewareOptions _options;
private readonly ILogger _logger;
private readonly Func<object, Task> _setHeadersDelegate;
private readonly DiagnosticSource _diagnosticSource;
public SetHeadersHandlerMiddleware(
RequestDelegate next,
ILoggerFactory loggerFactory,
IOptions<SetHandlersMiddlewareOptions> options,
DiagnosticSource diagnosticSource)
{
_next = next;
_options = options.Value;
_logger = loggerFactory.CreateLogger<SetHeadersMiddleware>();
_setHeadersDelegate= MessWithHeaders;
_diagnosticSource = diagnosticSource;
}
public async Task Invoke(HttpContext context)
{
context.Response.OnStarting(_setHeadersDelegate, context.Response);
await _next(context);
}
private Task MessWithHeaders(object state)
{
var response = (HttpResponse)state;
// Manipulate response.Headers here
return Task.FromResult(0);
}
}
因此,如果您使用的是 IIS,则接受的答案是正确的。如果您直接使用 Kestrel(或者甚至是 NGINX),那么它是行不通的。而 .net core 的部分优点在于跨平台!
取自此处:http://dotnetcoretutorials.com/2017/01/08/set-x-frame-options-asp-net-core/
要设置 X-FRAME-OPTIONS 或实际上任何其他 header,您只需要在 startup.cs
的 Configure 方法中使用类似于下面的内容
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc();
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
await next();
});
}
如果您需要在特定的 Web 服务器(例如 Apache、NGinx 等)上执行此操作,则只需搜索如何为该特定服务器添加自定义 headers。
之前我总是添加add name="X-Frame-Options" value="DENY" or "SAMEORIGIN" 在 Web.config 中的 CustomHeaders 下,但它已经消失了。知道如何做这个 asp5 mvc6 吗?
Web.config
没有消失。它已从项目根目录移至 /wwwroot
文件夹。 IIS 仍然依赖于这些设置,包括您提到的 X-Frame-Options
设置,它适用于所有请求,而不仅仅是传递给 MVC 的请求。但是,如果您不打算在 IIS 下托管您的应用程序,您可能需要寻找其他方法来启用这些设置。
我刚刚测试并验证了将此部分放入 /wwwroot/web.config
文件会在 IIS express 上添加 header。
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
</customHeaders>
</httpProtocol>
我认为选项取决于您的环境,如果您使用 IIS,那么您可以使用 NightOwl 的答案并将其修复在 web.config,这在 Azure 中也适用,因为 Kestrel 是 运行 IIS 后面有。否则我认为您需要添加自定义中间件,将此 header 添加到响应中(或者某些现有的中间件可以做到这一点,但我不知道...)
如果您想同时兼容 IIS 和 Kestrel(因此 linux),您显然不能使用 config。您将不得不使用中间件。在您的中间件中,您可以将 context.Response.OnStarting()
委托挂接到 Invoke() method
.
例如,Exception middleware 就是这样做的,因此您可以像这样复制该模式(在注释中编码,而不是 VS)
public class SetHeadersMiddleware
{
private readonly RequestDelegate _next;
private readonly SetHandlersMiddlewareOptions _options;
private readonly ILogger _logger;
private readonly Func<object, Task> _setHeadersDelegate;
private readonly DiagnosticSource _diagnosticSource;
public SetHeadersHandlerMiddleware(
RequestDelegate next,
ILoggerFactory loggerFactory,
IOptions<SetHandlersMiddlewareOptions> options,
DiagnosticSource diagnosticSource)
{
_next = next;
_options = options.Value;
_logger = loggerFactory.CreateLogger<SetHeadersMiddleware>();
_setHeadersDelegate= MessWithHeaders;
_diagnosticSource = diagnosticSource;
}
public async Task Invoke(HttpContext context)
{
context.Response.OnStarting(_setHeadersDelegate, context.Response);
await _next(context);
}
private Task MessWithHeaders(object state)
{
var response = (HttpResponse)state;
// Manipulate response.Headers here
return Task.FromResult(0);
}
}
因此,如果您使用的是 IIS,则接受的答案是正确的。如果您直接使用 Kestrel(或者甚至是 NGINX),那么它是行不通的。而 .net core 的部分优点在于跨平台!
取自此处:http://dotnetcoretutorials.com/2017/01/08/set-x-frame-options-asp-net-core/
要设置 X-FRAME-OPTIONS 或实际上任何其他 header,您只需要在 startup.cs
的 Configure 方法中使用类似于下面的内容public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc();
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
await next();
});
}
如果您需要在特定的 Web 服务器(例如 Apache、NGinx 等)上执行此操作,则只需搜索如何为该特定服务器添加自定义 headers。