1

在我总是在 Web.config 的 CustomHeaders 下添加 name="X-Frame-Options" value="DENY" 或 "SAMEORIGIN" 之前,但这已经消失了。知道怎么做这个asp5 mvc6吗?

4

4 回答 4

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>
于 2016-02-02T15:17:44.093 回答
1

我认为这些选项取决于您的环境,如果您使用 IIS,那么您可以使用 NightOwl 的答案并在 web.config 中修复它,这也适用于 Azure,因为 Kestrel 在那里运行在 IIS 后面。否则,我认为您需要添加自定义中间件,以将此标头添加到响应中(或者某些现有的中间件可以做到这一点,但我不知道......)

于 2016-02-02T15:22:09.507 回答
0

如果你想同时兼容 IIS 和 Kestrel(以及 Linux),你显然不能使用 config. 您将不得不使用中间件。在您的中间件中,您可以将context.Response.OnStarting()委托挂接到您的Invoke() method.

例如,异常中间件就是这样做的,所以你可以像这样复制那个模式(在注释中编码,而不是在 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); 
    } 
}
于 2016-02-02T21:04:15.307 回答
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 等)上执行此操作,则只需搜索如何为该特定服务器添加自定义标头。

于 2017-01-09T19:32:16.297 回答