簡體   English   中英

.headers().frameOptions().disable() 是如何工作的?

[英]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消息出現在任何內部塊上

我的疑問是:

  1. .headers().frameOptions().disable()是如何工作的?
  2. 將這句話用於生產環境是否安全? 考慮.csrf().ignoringAntMatchers("/h2-console/**")csrf().disable()之間的區別,前者是特定的,后者是“全局的”(不推薦)。 因此,可能會提供比.headers().frameOptions().disable()更好的特定配置(乍一看對我來說是“全局”配置)僅適用於/h2-console/
  3. .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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM