.headers().frameOptions().disable() 是如何工作的?
How does .headers().frameOptions().disable() work?
关于 Spring Security
允许、控制和访问 h2
网络控制台
我看了这两个帖子:
总而言之,必须使用以下内容(在某种程度上“有所改进”):
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.mvcMatchers("/admin/**").hasRole("ADMIN")
...
.mvcMatchers("/h2-console/**").hasRole("ADMIN")
.and()
.csrf().ignoringAntMatchers("/h2-console/**")
.and()
.headers().frameOptions().disable()
.and()
出于安全原因,最好使用 .csrf().ignoringAntMatchers("/h2-console/**")
而不是 csrf().disable()
,因为禁用点仅适用于 /h2-console/
,后者是全局的,不推荐使用。
直到这里我都很好。我能够看到
一旦登录过程发生并且用户具有所需的角色,H2 web 控制台。
现在是强制使用.headers().frameOptions().disable()
,如果不使用会出现以下情况:
当鼠标光标悬停在任何内部块上时,localhost refused to connect
消息会出现在任何内部块上
我的疑惑是:
.headers().frameOptions().disable()
是如何工作的?
- 在生产环境中使用这句话安全吗?考虑两者之间的区别
.csrf().ignoringAntMatchers("/h2-console/**")
和 csrf().disable()
,前者是特定的,后者是“全局的”(不推荐)。因此,也许会有比 .headers().frameOptions().disable()
更好的特定配置(乍一看对我来说是“全局”配置)仅适用于 /h2-console/
.headers().frameOptions().disable()
是否会对其他 configure(HttpSecurity http)
配置有任何直接或间接的负面影响? (主要用于生产)
首先,让我们看一下 X-Frame-Options 响应 header。
此 header 可用于指示是否应允许浏览器以 <frame>
或 <iframe>
.
呈现页面
网站可以使用它来避免 Clickjacking 攻击,方法是确保它们的内容不会嵌入到其他网站中。
Spring 安全性将 X-Frame-Options 响应 header 默认设置为 DENY
。
这会告诉浏览器该页面无法显示在框架中,无论网站是否尝试这样做。
由于 H2 控制台 UI 使用 <frame>
元素,因此不会呈现这些元素,您将看到您在问题中分享的错误屏幕。
Spring 安全允许您使用安全 DSL 中的 .headers().frameOptions()
自定义此行为。
如果您选择通过设置 .headers().frameOptions().disable()
来禁用 X-Frame-Options header(不推荐),那么 Spring 安全将不会添加 X-Frame-Options header响应。
这意味着您的应用程序可以在一个框架中呈现,也可能 容易受到点击劫持攻击.
对于这个用例,将 X-Frame-Options 设置为 SAMEORIGIN
就足够了。
http
.headers(headers -> headers
.frameOptions(frameOptions -> frameOptions
.sameOrigin()
)
)
这告诉浏览器该页面只能显示在与页面本身相同来源的框架中。
由于 H2 控制台 UI 中的帧(例如 http://localhost:8080/h2-console/tables.do
)与 H2 控制台(http://localhost:8080/h2-console
)具有相同的来源,浏览器将允许它们被显示。
但是,如果另一个(可能是恶意的)网站试图嵌入一个页面,浏览器将不允许。
关于 Spring Security
允许、控制和访问 h2
网络控制台
我看了这两个帖子:
总而言之,必须使用以下内容(在某种程度上“有所改进”):
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.mvcMatchers("/admin/**").hasRole("ADMIN")
...
.mvcMatchers("/h2-console/**").hasRole("ADMIN")
.and()
.csrf().ignoringAntMatchers("/h2-console/**")
.and()
.headers().frameOptions().disable()
.and()
出于安全原因,最好使用 .csrf().ignoringAntMatchers("/h2-console/**")
而不是 csrf().disable()
,因为禁用点仅适用于 /h2-console/
,后者是全局的,不推荐使用。
直到这里我都很好。我能够看到 一旦登录过程发生并且用户具有所需的角色,H2 web 控制台。
现在是强制使用.headers().frameOptions().disable()
,如果不使用会出现以下情况:
当鼠标光标悬停在任何内部块上时,localhost refused to connect
消息会出现在任何内部块上
我的疑惑是:
.headers().frameOptions().disable()
是如何工作的?- 在生产环境中使用这句话安全吗?考虑两者之间的区别
.csrf().ignoringAntMatchers("/h2-console/**")
和csrf().disable()
,前者是特定的,后者是“全局的”(不推荐)。因此,也许会有比.headers().frameOptions().disable()
更好的特定配置(乍一看对我来说是“全局”配置)仅适用于/h2-console/
.headers().frameOptions().disable()
是否会对其他configure(HttpSecurity http)
配置有任何直接或间接的负面影响? (主要用于生产)
首先,让我们看一下 X-Frame-Options 响应 header。
此 header 可用于指示是否应允许浏览器以 <frame>
或 <iframe>
.
呈现页面
网站可以使用它来避免 Clickjacking 攻击,方法是确保它们的内容不会嵌入到其他网站中。
Spring 安全性将 X-Frame-Options 响应 header 默认设置为 DENY
。
这会告诉浏览器该页面无法显示在框架中,无论网站是否尝试这样做。
由于 H2 控制台 UI 使用 <frame>
元素,因此不会呈现这些元素,您将看到您在问题中分享的错误屏幕。
Spring 安全允许您使用安全 DSL 中的 .headers().frameOptions()
自定义此行为。
如果您选择通过设置 .headers().frameOptions().disable()
来禁用 X-Frame-Options header(不推荐),那么 Spring 安全将不会添加 X-Frame-Options header响应。
这意味着您的应用程序可以在一个框架中呈现,也可能 容易受到点击劫持攻击.
对于这个用例,将 X-Frame-Options 设置为 SAMEORIGIN
就足够了。
http
.headers(headers -> headers
.frameOptions(frameOptions -> frameOptions
.sameOrigin()
)
)
这告诉浏览器该页面只能显示在与页面本身相同来源的框架中。
由于 H2 控制台 UI 中的帧(例如 http://localhost:8080/h2-console/tables.do
)与 H2 控制台(http://localhost:8080/h2-console
)具有相同的来源,浏览器将允许它们被显示。
但是,如果另一个(可能是恶意的)网站试图嵌入一个页面,浏览器将不允许。