Làm cách nào để tắt tiêu đề phản hồi 'X-Frame-Options' trong Spring Security?


89

Tôi có CKeditor trên jsp của mình và bất cứ khi nào tôi tải lên nội dung nào đó, lỗi sau sẽ xuất hiện:

 Refused to display 'http://localhost:8080/xxx/xxx/upload-image?CKEditor=text&CKEditorFuncNum=1&langCode=ru' in a frame because it set 'X-Frame-Options' to 'DENY'.

Tôi đã thử gỡ bỏ Spring Security và mọi thứ hoạt động như một sự quyến rũ. Làm cách nào để tắt tính năng này trong tệp xml bảo mật mùa xuân? Tôi nên viết gì giữa <http>các thẻ


1
Không có câu trả lời nào dưới đây giải quyết được liệu có thể áp dụng SAMEORIGIN hoặc CHO PHÉP ở cấp phương pháp bộ điều khiển hay không - có ai biết không?
Đen

Câu trả lời:


111

Theo mặc định X-Frame-Optionsđược đặt thành bị từ chối, để ngăn chặn các cuộc tấn công clickjacking . Để ghi đè điều này, bạn có thể thêm phần sau vào cấu hình bảo mật mùa xuân của mình

<http>    
    <headers>
        <frame-options policy="SAMEORIGIN"/>
    </headers>
</http>

Dưới đây là các tùy chọn có sẵn cho chính sách

  • DENY - là một giá trị mặc định. Với điều này, trang không thể được hiển thị trong một khung, bất kể trang web có cố gắng làm như vậy hay không.
  • SAMEORIGIN - Tôi giả sử đây là những gì bạn đang tìm kiếm, vì vậy trang sẽ được (và có thể được) hiển thị trong một khung trên cùng nguồn gốc với chính trang đó
  • CHO PHÉP TỪ - Cho phép bạn chỉ định nguồn gốc, nơi trang có thể được hiển thị trong một khung.

Để biết thêm thông tin, hãy xem ở đây .

đây để kiểm tra cách bạn có thể định cấu hình tiêu đề bằng cách sử dụng cấu hình XML hoặc Java.

Lưu ý rằng bạn cũng có thể cần chỉ định phù hợp strategy, dựa trên nhu cầu.


Không gian tên cho cái này httpheaderscác thẻ là gì?
Pasupathi Rajamanickam

4
Có thể áp dụng điều này làm mức phương pháp bộ điều khiển không?
mad_fox

4
Nếu bạn cần phải cấu hình nó trong phương pháp cấu hình WebSecurityConfigurerAdapter của, hãy viết đoạn mã sau:http.headers().frameOptions().sameOrigin();
russellhoff

@vtor Tôi sử dụng spring 3.1 và điều này không được hỗ trợ, bạn có thể đề xuất bất kỳ giải pháp nào?
Mùa xuân

@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… nó được hỗ trợ. Bạn có thể vui lòng chia sẻ những gì bạn đã thử và không hiệu quả?
vtor

103

Nếu bạn đang sử dụng cấu hình Java thay vì cấu hình XML, hãy đặt điều này vào WebSecurityConfigurerAdapter.configure(HttpSecurity http)phương pháp của bạn :

http.headers().frameOptions().disable();

34
Sử dụng vô hiệu hóa () là một lựa chọn nhưng nếu đó là trên cùng một máy chủ, sử dụnghttp.headers().frameOptions().sameOrigin();
Ian Newland

59

Nhiều khả năng bạn không muốn hủy kích hoạt Header này hoàn toàn, nhưng hãy sử dụng SAMEORIGIN. Nếu bạn đang sử dụng Java Configs ( Spring Boot) và muốn cho phép X-Frame-Options:, SAMEORIGINthì bạn sẽ cần sử dụng những điều sau.


Đối với các phiên bản Spring Security cũ hơn:

http
   .headers()
       .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))

Đối với các phiên bản mới hơn như Spring Security 4.0.2 :

http
   .headers()
      .frameOptions()
         .sameOrigin();

Làm thế nào để cấu hình điều này trong Spring 3.2.12?
Pasupathi Rajamanickam

1
Di chuyển từ 3.X sang 4.X và gặp phải vấn đề này vì nó chỉ mới bổ sung dựa trên ví dụ đầu tiên. cám ơn.
steve

18

Nếu sử dụng cấu hình XML, bạn có thể sử dụng

<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:security="http://www.springframework.org/schema/security"> 
<security:http>
    <security:headers>
         <security:frame-options disabled="true"></security:frame-options>
    </security:headers>
</security:http>
</beans>

11

Nếu bạn đang sử dụng cấu hình Java của Spring Security, tất cả các tiêu đề bảo mật mặc định được thêm vào theo mặc định. Có thể tắt chúng bằng cách sử dụng cấu hình Java bên dưới:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .headers().disable()
      ...;
  }
}

9

Nếu bạn đang sử dụng Spring Boot, cách đơn giản nhất để tắt tiêu đề mặc định của Spring Security là sử dụng security.headers.*thuộc tính. Đặc biệt, nếu bạn muốn tắt X-Frame-Optionstiêu đề mặc định, chỉ cần thêm phần sau vào application.properties:

security.headers.frame=false

Ngoài ra còn có security.headers.cache, security.headers.content-type, security.headers.hstssecurity.headers.xsstính năng mà bạn có thể sử dụng. Để biết thêm thông tin, hãy xem qua SecurityProperties.


5
Trong Spring Boot 2.x, phương pháp này không được dùng nữa. "Cấu hình tự động bảo mật không còn tùy chỉnh được nữa. Hãy cung cấp bean WebSecurityConfigurer của riêng bạn."
mrkernelpanic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.