.net 核心安全 headers 中间件未向外部 http 请求添加 headers

.net core security headers middleware not adding headers to external http requests

我在 Web 应用程序中使用安全性 headers 中间件来为所有传出的 http 请求添加安全性 headers。安全性 headers 似乎被添加到对内部资源的所有网络请求中 - 即构成 Web 应用程序的资源,例如 javascript 脚本和 Web 应用程序中使用的图像以及 css 和 html 个文件。但是,安全性 headers 不会添加到任何外部 http 请求,例如添加到我创建的 Web 应用程序用来获取 json 数据的 API。我如何让它只向所有内容添加安全性 headers,而不是仅向 Web 应用程序自己的资源添加安全性?

下面是一些增加安全性的相关代码headers中间件

startup.cs

private ILogger<SecurityHeadersBuilder> _logger;
private readonly SecurityHeadersPolicy _policy = new SecurityHeadersPolicy();

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, ISecurityHeadersBuilder securityHeadersBuilder)
{...
    app.UseSecurityHeadersMiddleware(
        securityHeadersBuilder.AddDefaultSecurePolicy()
    );

securityHeadersBuilder.cs

public SecurityHeadersBuilder AddDefaultSecurePolicy()
{
    AddFrameOptionsDeny();
    AddXssProtectionBlock();
    AddContentTypeOptionsNoSniff();
    AddNoCache();
    AddStrictTransportSecurityMaxAgeIncludeSubDomains();
    AddContentSecurityPolicyAllContentFromSelfAndGoogle();
    RemoveServerHeader();
    return this;
}

public SecurityHeadersBuilder AddFrameOptionsDeny()
{
    _policy.SetHeaders[FrameOptionsConstants.Header] = FrameOptionsConstants.Deny;
    _logger.LogInformation(string.Format("setting {0} http header value to {1}", FrameOptionsConstants.Header, FrameOptionsConstants.Deny));
    return this;
}

有两种类型的 headers:request headers 和 _response headers。

服务器设置响应 headers 以指示浏览器如何处理响应(例如阻止 iframing)。 因此,使用(例如)header X-Frame-Options : Deny 进行请求是没有意义的。因为客户端应用程序可以更改值并忽略安全限制。无论如何,服务器不会处理 header 的值,浏览器的 user-agent 将使用此 response header.

如果您调用(外部)API,您应该手动添加 request headers 到 HttpClient 并进行电话。 API 反过来可以 return (安全)响应 headers.

示例代码中的所有 headers 都是 response headers 并且不应设置为 request headers.