允许将您的网站添加到框架中可能是一个安全问题。例如,使用巧妙的 CSS 样式,用户可能会被诱骗点击他们不打算点击的内容。
在 https://www.youtube.com/watch?v=3mk0RySeNsU< 查看点击劫持视频演示/一>。
例如,登录到其银行的用户可能会单击授予其他用户访问权限的按钮。这种攻击被称为点击劫持。
在 https://www.owasp.org/index.php/Clickjacking。
另一种处理点击劫持的现代方法是使用内容安全策略。 Spring Security 不提供对此的支持,因为规范尚未发布,而且它有点复杂。但是,您可以使用静态标题功能来实现这一点。要及时了解此问题并了解如何使用 Spring Security 实现它,请参阅 https://github.com/spring-projects/spring-security/issues/2342。
有多种方法可以减轻点击劫持攻击。例如,为了保护旧版浏览器免受 Clickjacking 攻击,您可以使用断帧代码。虽然不完美,但对于旧版浏览器来说,破帧代码是最好的。
解决 Clickjacking 的一种更现代的方法是使用 X-Frame-Options 标头,如下所示:
X-Frame-Options 响应标头指示浏览器阻止响应中包含此标头的任何站点在框架内呈现。与其他响应头一样,当 headers() 方法指定时没有子元素时,它会自动包含在内。您还可以显式指定 frame-options 元素来控制将哪些标头添加到响应中,如下所示:
如果要更改 X-Frame-Options 标头的值,则可以使用 XFrameOptionsHeaderWriter 实例。
一些浏览器内置了过滤反射 XSS 攻击的支持。这绝不是万无一失的,但它确实有助于 XSS 保护。
过滤通常默认启用,因此添加标头只是确保启用它并指示浏览器在检测到 XSS 攻击时执行什么操作。例如,过滤器可能会尝试以侵入性最小的方式更改内容以仍然呈现所有内容。有时,这种类型的替换本身可能成为 XSS 漏洞。相反,最好阻止内容,而不是尝试修复它。为此,我们可以添加以下标头:
当 headers() 方法没有指定子元素时,默认情况下会包含此标头。我们可以使用 xssProtection 元素显式声明它,如下所示: