[英]Disable X-FrameOptions response header for a URL Spring Security JAVA config
[英]How does .headers().frameOptions().disable() work?
關於Spring Security
允許、控制和訪問h2
web 控制台的安全性
我讀了這兩個帖子:
總之,強制使用以下內容(以某種方式“改進”):
@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()
,如果不使用會發生以下情況:
當鼠標的 cursor 在其中任何一個上時, 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>
中呈現頁面。
網站可以使用它來避免點擊劫持攻擊,方法是確保其內容不會嵌入到其他網站中。
Spring Security 默認將 X-Frame-Options 響應 header 設置為DENY
。
這告訴瀏覽器該頁面不能顯示在框架中,無論站點是否嘗試這樣做。
由於 H2 控制台 UI 使用<frame>
元素,因此不會呈現這些元素,您將看到您在問題中共享的錯誤屏幕。
Spring Security 允許您使用安全 DSL 中的.headers().frameOptions()
自定義此行為。
如果您選擇通過設置.headers().frameOptions().disable()
來禁用 X-Frame-Options header(不推薦),那么 Spring Security 將不會將 X-Frame-Options Z099EFB965346F339E7 添加到響應中。
這意味着您的應用程序可以在一個框架中呈現,也可能容易受到 Clickjacking 攻擊。
對於這個用例,將 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
)位於同一來源,瀏覽器將允許它們顯示。
但是,如果一個不同的(可能是惡意的)網站試圖嵌入一個頁面,瀏覽器將不允許它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.