我在网络应用中使用安全标头中间件为所有传出的http请求添加安全标头。安全标头似乎被添加到内部资源的所有网络请求 - 这是构成Web应用程序的资源,例如javascript脚本和Web应用程序中使用的图像以及css和html文件。但是,安全标头不会添加到任何外部http请求中,例如我创建的Web应用程序用于获取json数据的API。我如何才能将安全标头添加到所有内容中,而不仅仅是添加到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()
);
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;
}
答案 0 :(得分:1)
有两种类型的标头:请求标头和_response标头。
服务器设置响应头以指示浏览器如何处理响应(例如阻止iframing)。
因此,使用(例如)标头X-Frame-Options : Deny
进行请求是没有意义的。因为客户端应用程序可能会更改值并忽略安全限制。无论如何,服务器都不会处理标题的值,浏览器的用户代理将使用此响应标题。
如果您拨打(外部)API,则应手动将请求标头添加到HttpClient
并拨打电话。 API又可以返回(安全)响应头。
示例代码中的所有标头都是响应标头,不应设置为 request 标头。