Security .net核心安全标头中间件不向外部http请求添加标头

Security .net核心安全标头中间件不向外部http请求添加标头,security,asp.net-core,asp.net-core-mvc,.net-core,asp.net-core-middleware,Security,Asp.net Core,Asp.net Core Mvc,.net Core,Asp.net Core Middleware,我正在使用web应用程序中的安全标头中间件向所有传出http请求添加安全标头。安全标题似乎被添加到所有对内部资源的网络请求中,即构成web应用程序的资源,如javascript脚本和web应用程序中使用的图像以及css和html文件。但是,安全头不会添加到任何外部http请求中,例如添加到我制作的API中,web应用程序使用该API获取json数据。我如何让它只向所有内容添加安全标题,而不仅仅是向web应用程序自己的资源添加安全标题 下面是一些添加安全头中间件的相关代码 startup.cs p

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

下面是一些添加安全头中间件的相关代码

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()
    );
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;
}

有两种类型的头:请求头和_响应头

服务器设置响应头以指示浏览器如何处理响应(例如,块iframing)。 因此,使用(例如)标题
X-Frame-Options:Deny
执行请求是没有意义的。因为客户端应用程序可以更改该值并忽略安全限制。服务器无论如何都不会处理头的值,浏览器的用户代理将使用此响应头

如果调用(外部)API,则应手动将请求头添加到
HttpClient
并进行调用。API反过来可以返回(安全)响应头


示例代码中的所有头都是响应头,不应设置为请求头。

您能否进一步解释一下您所说的从服务器请求
x-frame-options:deny
没有意义?只是试着去理解,因为这会教会我很多。关于向
HttpClient
手动添加头,您的意思是将它们添加到从web应用发送http请求的代码段中吗?谢谢我确实在web应用程序中添加了http客户端的头。我只是不确定他们是否做了任何事情,这与你所说的一致,我认为,一些标题在请求中是毫无意义的。当我将
内容安全策略
头添加到http请求时,它肯定不起任何作用。我只需要从http请求中决定哪一个可以做任何事情。我编辑了我的答案以澄清问题。您试图请求的头实际上是响应头,因此它们实际上毫无意义。