有一个项目启用了 Spring Security,后台使用的是 H2 数据库。 使用用户名和密码登录后没有问题,但登录后提示 ‘X-Frame-Options’ to ‘deny’. 错误。 错误信息如上图。 问题和解决 X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>、<iframe>、<embed> 或者 <object> 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免点击劫持 攻击。 X-Frame-Options有三种可配置值 X-Frame-Options: DENY X-Frame-Options: SAMEORIGIN X-Frame-Options: ALLOW-FROM https://example.com/ 第一个例子告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。 第二个例子告诉浏览器只有当架设iFrame的网站与发出X-Frame-Options的网站相同,才能显示发出X-Frame-Options网页的内容。 第三个例子告诉浏览器这个网页只能放在 https://example.com/ 网页架设的iFrame内。 不指定X-Frame-Options的网页等同表示它可以放在任何iFrame内。 X-Frame-Options可以保障你的网页不会被放在恶意网站设定的iFrame内,令用户成为点击劫持的受害人。 如上图所展示的内容,受害者通常是因为点击了来路不明的网页,在这个网页中通常有一个 IFrame 嵌入。 然后攻击者就可以利用这个漏洞来对用户的点击进行劫持。 Spring Security 的启用 在 Spring 中,我们可以使用下面的代码来进行同源性校验。 http.headers().frameOptions().sameOrigin(); 当然,更可以直接禁用这个校验。 针对我们的问题,使用同源性校验就可以满足要求了。 https://www.ossez.com/t/spring-security-x-frame-options-to-deny/14123