.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.
我在 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.