在我总是添加add name =" X-Frame-Options"值=" DENY"或" SAMEORIGIN" 在Web.config中的CustomHeaders下,但已经消失了。不知道怎么做这个asp5 mvc6?
答案 0 :(得分:4)
Web.config
没有消失。它已从项目根目录移动到/wwwroot
文件夹。 IIS仍然依赖于这些设置,包括您提到的X-Frame-Options
设置,该设置适用于所有请求,而不仅仅是传递给MVC的设置。但是,如果您不打算在IIS下托管应用程序,则可能需要找到其他方法来启用这些设置。
我刚刚测试并验证了将此部分放入/wwwroot/web.config
文件中,在IIS Express上添加了标题。
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
</customHeaders>
</httpProtocol>
答案 1 :(得分:1)
我认为选项取决于您的环境,如果您使用IIS,那么您可以使用NightOwl的答案并在web.config中修复它,这也适用于Azure,因为Kestrel在IIS后面运行。否则我认为你需要添加你的自定义中间件,将这个标题添加到响应中(或者一些现有的中间件可以做到这一点,但我不知道......)
答案 2 :(得分:0)
如果你想兼容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);
}
}
答案 3 :(得分:0)
因此,如果您使用IIS,则接受的答案是正确的。如果您直接使用Kestrel(甚至是NGINX),那么它无法正常工作。而.net核心的一部分就是跨平台!
从这里采取:http://dotnetcoretutorials.com/2017/01/08/set-x-frame-options-asp-net-core/
要设置X-FRAME-OPTIONS或实际上任何其他标题,您只需要在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等)上执行此操作,那么只需搜索如何为该特定服务器添加自定义标头。