SpringSecurity------HTTP Response Headers(四)


有很多的HTTP Response Headers可以用于提高应用程序的安全级别。下面我们专门讨论Spring Security提供支持的各种HTTP响应头,如果需要,我们也可以使用自定义的HTTP Response Headers。

一、SpringSecurity的默认HTTP Response Headers

Spring Security提供了一组与安全性相关的默认HTTP响应头:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

注意:Strict-Transport-Security 只适用于HTTPS Requests

二、SpringSecurity的默认HTTP Response Headers介绍

1、Cache Control

如果一个登录用户访问了敏感信息,然后登出,我们不希望非法用户通过点击回退按钮去浏览敏感信息,为了保护用户的内容安全,Spring Security默认禁用缓存。Cache Control请求头需要如下设置:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0

如果应用程序提供了自己的缓存控制头,Spring Security的Cache Control默认设置就会失效,这样应用程序就可以缓存一些静态资源(CSS和JavaScript等)。

2、Content Type Options

旧版浏览器,包括Internet Explorer,会尝试使用内容嗅探(content sniffing)来推断请求的Content Type,以此来改善用户体验。例如,如果浏览器遇到一个没有指定Content Type的JavaScript文件,它将能够推断出Content Type,然后运行它。内容嗅探会导致一个问题,非法用户可以使用多种语言进行XSS攻击。例如,一些站点可能允许用户向网站提交有效的postscript文档并进行查看。非法用户可能创建一个postscript文档,该文档也是一个有效的JavaScript文件,并使用它执行XSS攻击。Spring Security 可以添加X-Content-Type-Options来禁用内容嗅探:

X-Content-Type-Options: nosniff

3、HTTP Strict Transport Security (HSTS)

忽略https协议,可能受到中间人攻击(Man in the Middle)。即使网站执行重定向到HTTPS请求,非法用户也可以拦截初始的HTTP请求并操纵响应。许多用户忽略了HTTPS协议,这就是创建HTTP Strict Transport Security (HSTS)的原因。如果应用服务器被设置为HSTS HOST,浏览器就可以提前知道对服务器的任何请求都应该被解释为HTTPS。这大大降低了中间人攻击发生的可能性。

将站点标记为HSTS HOST的一种方法是将HOST预加载到浏览器中。另一种方法是向HTTP Response Headers添加Strict-Transport-Security。Spring Security的默认添加以下HTTP Response Headers:

Strict-Transport-Security: max-age=31536000 ; includeSubDomains ; preload
  • 它指示浏览器将域作为HSTS HOST处理一年(一年大约有31536000秒)

  • 选项includeSubDomains指示浏览器需要将子域(比如secure.mybank.example.com)也当做HSTS域

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

4、HTTP Public Key Pinning (HPKP)

由于使用HPKP比较复杂,不在推荐使用。谷歌浏览器已经移除了对HPKP的支持。

5、X-Frame-Options

允许你的站点被添加到一个frame中会存在安全问题,比如使用合适的CSS样式诱骗用户点击他们本不打算点击的东西,这种攻击被称为点击劫持(Clickjacking)。有很多方法可以减少点击劫持。例如,要保护老式浏览器免受点击劫持攻击,可以使用Frame破坏代码。虽然不是完美的,但Frame破坏代码是可以为传统浏览器所做的最好的防护措施。解决点击劫持的一种更现代的方法是使用X-Frame-Options头。Spring Security禁用iframe中呈现页面的HTTP Response Headers:

X-Frame-Options: DENY

6、X-XSS-Protection

一些浏览器内置了对跨站攻击(XSS)的过滤功能,这绝不是万无一失的,但确实有助于XSS的保护。.过滤通常在默认情况下是启用的,因此添加Headers通常只是确保启用了它,并指示浏览器在检测到XSS攻击时应该做什么。例如,过滤器可能试图以侵入性最小的方式更改内容,仍然呈现所有内容。有时,这种类型的修改本身可能成为XSS漏洞。相反,最好是屏蔽内容,而不是试图修复它。Spring Security屏蔽内容的HTTP Response Headers:

X-XSS-Protection: 1; mode=block

三、其他的HTTP Response Headers介绍

7、Content Security Policy (CSP)

Web应用程序可以使用内容安全策略(CSP)减少内容注入漏洞(content injection vulnerabilities),比如跨站点脚本(XSS)。CSP是一种声明性策略,它可以用于声明并最终通知客户端(user-agent) Web应用程序希望从哪里加载资源。Web应用程序可以通过设置下面的HTTP Response Headers中的一个来使用CSP:

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

以上每一个HTTP Response Headers都会为客户端提供一种安全策略,每一种安全策略都会有一组安全策略指令,每个指令都会声明特定资源的限制,比如一个Web应用程序可以使用下面的HTTP Response Headers设置来声明其加载脚本的可信资源地址,如果试图从其他资源地址加载脚本,将会被user-agent阻止:

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

如果在Header的Content-Security-Policy中声明了report-uri属性,非法加载行为将会报告给report-uri指定的URL:

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

Content-Security-Policy-Report-Only设置只是为程序开发人员提供监视安全策略的功能,实际不会强制执行它们。这个HTTP Response Headers设置通常为站点实验或是开发安全策略时使用,加载非法站点资源会被报告给指定URL,但是不会阻止非法资源的加载:

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

8、Referrer Policy

引用策略(Referrer Policy)包含用户所在的最后一个页面,Spring Security提供了引用策略的HTTP Response Headers设置:

Referrer-Policy: same-origin

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

9、Feature Policy 和 Permissions Policy

特性策略(Feature Policy)和权限策略(Permissions Policy)是一种允许Web开发人员有选择地启用、禁用和修改浏览器中某些api和Web特性的行为的机制。

Feature-Policy: geolocation 'self'

Permissions-Policy: geolocation=(self)

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

10、Clear Site Data

Clear Site Data是一种机制,当HTTP Response Headers包含以下报头时,任何浏览器端数据(cookie、本地存储等)都可以被移除:

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

这是一个很好的注销清理操作。

11、Cross-Origin Policies

跨源请求策略(Cross-Origin Policies),Spring Security提供了一些重要的跨源HTTP Response Headers设置:

  • Cross-Origin-Opener-Policy

  • Cross-Origin-Embedder-Policy

  • Cross-Origin-Resource-Policy

Cross-Origin-Opener-Policy (COOP)允许一个顶级文档打破它的窗口和浏览上下文组中的任何其他窗口之间的关联(例如,一个弹出窗口和它的打开器之间),阻止它们之间的任何直接DOM访问。

Cross-Origin-Embedder-Policy(COEP)可以防止文档加载任何没有显式授予要加载的文档权限的非同源资源。

Cross-Origin-Resource-Policy (CORP)报头允许您控制被授权包含资源的源的集合。 它是对Spectre这样的攻击的强大防御,因为它允许浏览器在进入攻击者的进程之前阻止给定的响应。

12、Custom Headers

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

上一篇:SpringSecurity------CSRF跨站请求伪造(三)
下一篇:SpringSecurity------加密机制Spring Security Crypto(五)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豢龙先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值