Spring Security的安全HTTP响应报头
发布日期:2021-06-29 15:52:25 浏览次数:2 分类:技术文章

本文共 4360 字,大约阅读时间需要 14 分钟。

有许多HTTP响应头可以用来提高web应用程序的安全性。如果有必要,Spring Security也可以配置为提供自定义头。

默认的安全头

Spring Security提供了一组与安全性相关的HTTP响应头来提供安全缺省值。

Spring Security的默认值是包含以下头部信息:

Cache-Control: no-cache, no-store, max-age=0, must-revalidatePragma: no-cacheExpires: 0X-Content-Type-Options: nosniffStrict-Transport-Security: max-age=31536000 ; includeSubDomainsX-Frame-Options: DENYX-XSS-Protection: 1; mode=block

ℹ️ Strict-Transport-Security只在https请求头中添加

可以轻松地从这些默认值中删除、修改或添加头部信息,详细信息参考具体部分:

Cache Control

Spring Security的默认设置是禁用缓存来保护用户的内容。

如果用户通过身份验证来查看敏感信息,然后退出,这时不希望恶意用户能够单击后退按钮来查看敏感信息。默认发送的缓存控制头是:

Cache-Control: no-cache, no-store, max-age=0, must-revalidatePragma: no-cacheExpires: 0

如果应用程序提供了自己的缓存控制头,Spring Security将会不生效。这允许应用程序确保像CSS和JavaScript这样的静态资源可以被缓存。

Content Type Options

浏览器会尝试使用内容嗅探来猜测请求的内容类型。这允许浏览器通过猜测没有指定内容类型的资源上的内容类型来改善用户体验。例如,如果浏览器遇到一个没有指定内容类型的JavaScript文件,它将能够猜测内容类型,然后执行它。

内容嗅探的问题是,这允许恶意用户使用多语言(即一个文件作为多种内容类型有效)来执行XSS攻击。例如,有些网站可能允许用户向网站提交有效的postscript文档并查看它。恶意用户可能创建一个postscript文档,它也是一个有效的JavaScript文件,并使用它执行XSS攻击。

Spring Security默认通过向HTTP响应添加以下头来禁用内容嗅探:

X-Content-Type-Options: nosniff

HTTP Strict Transport Security

当你输入你的银行网站时,你是输入mybank.example.com还是输入https://mybank.example.com?如果您忽略了https协议,您可能容易受到中间人攻击。即使网站执行重定向到https://mybank.example.com,一个恶意用户可以拦截最初的HTTP请求和操纵响应(l例如,重定向到https://mibank.example.com并窃取他们的凭证)。

许多用户忽略了https协议,这就是为什么创建了HTTP严格传输安全(HSTS)。一旦mybank.example.com被添加为HSTS主机,浏览器就可以提前知道对mybank.example.com的任何请求都应该被解释为https://mybank.example.com。这大大降低了中间人攻击发生的可能性。

ℹ️根据RFC6797, HSTS报头只被注入到HTTPS响应中。为了让浏览器确认报头,浏览器必须首先信任签署用于建立连接的SSL证书的CA(而不仅仅是SSL证书)。

将站点标记为HSTS主机的一种方法是将主机预加载到浏览器中。另一个方法是将Strict-Transport-Security头添加到响应中。例如,Spring Security的默认行为是添加以下头信息,指示浏览器将该域作为HSTS主机处理一年(一年大约有31536000秒):

Strict-Transport-Security: max-age=31536000 ; includeSubDomains ; preload

可选的includeSubDomains指令指示浏览器子域(即secure.mybank.example.com)也应该被视为HSTS域。

可选的preload指示浏览器应该在浏览器中作为HSTS域预加载。

X-Frame-Options

允许您的网站添加到一个框架可能是一个安全问题。例如,使用巧妙的CSS样式,用户可能会被诱骗,点击一些他们不想点击的东西(视频演示)。例如,登录到银行的用户可能会单击一个按钮,授予其他用户访问权限。这种类型的攻击被称为Clickjacking点击劫持

有很多方法可以减少点击劫持攻击。例如,为了保护遗留浏览器免受点击劫持攻击,您可以使用破坏框架的代码。虽然不完美,但打破框架的代码是你能做的最好的遗留浏览器。

一种更现代的处理点击劫持方法是使用X-Frame-Options报头。默认情况下,Spring Security使用以下报文头来禁用在iframe中渲染页面:

X-Frame-Options: DENY

X-XSS-Protection

一些浏览器内置了对过滤出反射式XSS攻击的支持。这绝不是万无一失的,但确实有助于XSS保护。

过滤通常在默认情况下是启用的,因此添加头通常只是确保启用了它,并指示浏览器在检测到XSS攻击时应该做什么。例如,过滤器可能会尝试以最不具侵入性的方式更改内容,以仍然呈现所有内容。有时,这种类型的替换本身就可能成为XSS漏洞。相反,最好是阻止内容,而不是试图修复它。默认情况下,Spring Security使用以下头文件阻止内容:

X-XSS-Protection: 1; mode=block

Content Security Policy (CSP)

内容安全策略(Content Security Policy, CSP)是一种机制,web应用程序可以利用它来减轻内容注入漏洞,如跨站点脚本(cross-site scripting, XSS)。CSP是一种声明性策略,它为web应用程序作者提供了一种工具,用于声明并最终通知客户机(用户-代理)web应用程序希望从其加载资源的源。

ℹ️内容安全策略并不打算解决所有内容注入漏洞。相反,可以利用CSP来帮助减少内容注入攻击造成的危害。作为第一道防线,web应用程序作者应该验证他们的输入并对输出进行编码

一个web应用程序可以通过在响应中包含以下其中一个HTTP头来使用CSP:

  • Content-Security-Policy
  • Content-Security-Policy-Report-Only

这些头中的每一个都用作向客户机交付安全策略的机制。安全策略包含一组安全策略指示,每个指示负责声明特定资源表示的限制。

例如,一个web应用程序可以通过在响应中包含以下头来声明它期望从特定的、可信的源加载脚本:

Content-Security-Policy: script-src https://trustedscripts.example.com

试图从其他源(不是在script-src指令中声明的)加载脚本将被用户代理阻止。此外,如果report-uri指令在安全策略中声明,那么用户代理将向声明的URL报告违反加载情况。

例如,如果一个web应用程序违反了声明的安全策略,下面的响应头将指示用户代理将违规报告发送到策略的report-uri指令中指定的URL。

Content-Security-Policy: script-src https://trustedscripts.example.com; report-uri /csp-report-endpoint/

违规报告是标准的JSON结构,可以由web应用程序自己的API或公共托管的CSP违规报告服务(如https://report-uri.io/)捕获

Content-Security-Policy-Report-Only头为web应用程序作者和管理员提供监视安全策略的能力,而不是强制执行它们。此头通常用于试验或开发站点的安全策略。当策略被认为有效时,可以通过使用Content-Security-Policy头字段来强制执行。

给定以下响应头,该策略声明可以从两个可能的源之一加载脚本。

Content-Security-Policy-Report-Only: script-src 'self' https://trustedscripts.example.com; report-uri /csp-report-endpoint/

如果站点违反了这一策略,通过尝试加载来自evil.com的脚本,用户代理将向report-uri指令指定的声明URL发送违规报告,但仍然允许违规资源加载

Referrer Policy

Referrer Policy是一种机制,web应用程序可以利用它来管理Referrer字段,该字段包含用户所处的最后一个页面。

Spring Security的方法是使用Referrer Policy头文件,它提供了不同的策略:

Referrer-Policy: same-origin

Referrer-Policy响应头指示浏览器让目标知道用户以前所在的源。

Feature Policy

Feature策略允许web开发者有选择地启用、禁用和修改浏览器中某些api和web特性的行为。

Feature-Policy: geolocation 'self'

有了Feature Policy,开发者可以为浏览器选择一组“策略”来强制在整个站点中使用特定的特性。这些策略限制了站点可以访问哪些api,或者针对某些特性修改浏览器的默认行为。

Clear Site Data

清除站点数据(Clear Site Data),当HTTP响应包含以下消息头时,任何浏览器端数据——cookie、本地存储等都可以被删除:

Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"

这是在注销时执行的一个很好的清理操作。

Custom Headers

Spring Security提供了一些机制,可以方便地向应用程序添加更常见的安全头。但是,它也提供了钩子来支持添加自定义头。

转载地址:https://console.blog.csdn.net/article/details/116399321 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring Security主要模块
下一篇:csrf之什么时候使用CSRF防护

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月06日 06时35分46秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章