วิธีปิดใช้งานส่วนหัวการตอบสนอง 'X-Frame-Options' ใน Spring Security


91

ฉันมี CKeditor ใน jsp และเมื่อใดก็ตามที่ฉันอัปโหลดบางสิ่งข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น:

 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'.

ฉันได้ลองลบ Spring Security แล้วและทุกอย่างก็เหมือนมีเสน่ห์ ฉันจะปิดใช้งานสิ่งนี้ในไฟล์ xml ความปลอดภัยในฤดูใบไม้ผลิได้อย่างไร ฉันควรเขียนอะไรระหว่าง<http>แท็ก


1
คำตอบด้านล่างยังไม่มีคำตอบว่าสามารถใช้ SAMEORIGIN หรือ ALLOW ที่ระดับวิธีการควบคุมได้หรือไม่ใครรู้บ้าง?
Black

คำตอบ:


113

โดยค่าเริ่มต้นX-Frame-Optionsจะถูกตั้งค่าเป็นปฏิเสธเพื่อป้องกันการโจมตีด้วยการคลิกแจ็ค ในการลบล้างสิ่งนี้คุณสามารถเพิ่มสิ่งต่อไปนี้ลงในการกำหนดค่าความปลอดภัยสปริงของคุณ

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

ตัวเลือกที่ใช้ได้สำหรับนโยบายมีดังนี้

  • DENY - เป็นค่าเริ่มต้น ด้วยเหตุนี้จึงไม่สามารถแสดงเพจในเฟรมได้ไม่ว่าไซต์จะพยายามทำเช่นนั้นก็ตาม
  • SAMEORIGIN - ฉันคิดว่านี่คือสิ่งที่คุณกำลังมองหาดังนั้นเพจจะ (และสามารถ) แสดงในเฟรมที่มีจุดเริ่มต้นเดียวกับเพจนั้นเอง
  • ALLOW-FROM - ช่วยให้คุณระบุจุดเริ่มต้นซึ่งสามารถแสดงเพจในเฟรมได้

สำหรับข้อมูลเพิ่มเติมลองดูที่นี่

และที่นี่เพื่อตรวจสอบว่าคุณสามารถกำหนดค่าส่วนหัวโดยใช้การกำหนดค่า XML หรือ Java ได้อย่างไร

โปรดทราบว่าคุณอาจต้องระบุความเหมาะสมstrategyตามความต้องการ


เนมสเปซสำหรับสิ่งนี้httpและheadersแท็กคืออะไร?
Pasupathi Rajamanickam

4
เป็นไปได้หรือไม่ที่จะใช้สิ่งนี้เป็นระดับวิธีการควบคุม
mad_fox

5
หากคุณต้องการกำหนดค่าภายในวิธีการกำหนดค่าของ WebSecurityConfigurerAdapter ให้เขียนรหัสต่อไปนี้:http.headers().frameOptions().sameOrigin();
russellhoff

@vtor ฉันใช้สปริง 3.1 และไม่รองรับวิธีแก้ปัญหาใด ๆ ที่คุณอาจแนะนำ?
ฤดูใบไม้ผลิ

@Spring docs.spring.io/spring-security/site/docs/current/reference/html/…ได้รับการสนับสนุน คุณช่วยแชร์สิ่งที่คุณลองแล้วไม่ได้ผลได้ไหม
vtor

105

หากคุณใช้การกำหนดค่า Java แทนการกำหนดค่า XML ให้ใส่สิ่งนี้ในWebSecurityConfigurerAdapter.configure(HttpSecurity http)วิธีของคุณ:

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

35
การใช้ disable () เป็นตัวเลือก แต่ถ้าอยู่บนเซิร์ฟเวอร์เดียวกันให้ใช้http.headers().frameOptions().sameOrigin();
Ian Newland

60

ส่วนใหญ่มีแนวโน้มที่คุณไม่ต้องการที่จะยกเลิกการใช้งานส่วนหัวนี้ได้อย่างสมบูรณ์ SAMEORIGINแต่การใช้ หากคุณใช้ Java Configs ( Spring Boot) และต้องการอนุญาต X-Frame-Options: SAMEORIGINคุณจะต้องใช้สิ่งต่อไปนี้


สำหรับ Spring Security เวอร์ชันเก่า:

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

สำหรับเวอร์ชันที่ใหม่กว่าเช่นSpring Security 4.0.2 :

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

จะกำหนดค่าใน Spring 3.2.12 ได้อย่างไร?
Pasupathi Rajamanickam

1
การย้ายข้อมูลจาก 3.X เป็น 4.X และพบกับสิ่งนี้เนื่องจากเป็นการต่อท้ายตามตัวอย่างแรก ขอบคุณ.
สตีฟ

18

หากใช้การกำหนดค่า XML คุณสามารถใช้ได้

<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

หากคุณใช้คอนฟิกูเรชัน Java ของ Spring Security ส่วนหัวความปลอดภัยดีฟอลต์ทั้งหมดจะถูกเพิ่มโดยค่าเริ่มต้น สามารถปิดใช้งานได้โดยใช้การกำหนดค่า Java ด้านล่าง:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

9

หากคุณใช้ Spring Boot วิธีที่ง่ายที่สุดในการปิดใช้งานส่วนหัวเริ่มต้นของ Spring Security คือการใช้security.headers.*คุณสมบัติ โดยเฉพาะอย่างยิ่งหากคุณต้องการปิดใช้งานX-Frame-Optionsส่วนหัวเริ่มต้นให้เพิ่มสิ่งต่อไปนี้ในapplication.properties:

security.headers.frame=false

นอกจากนี้ยังมีsecurity.headers.cache, security.headers.content-type, security.headers.hstsและsecurity.headers.xssคุณสมบัติที่คุณสามารถใช้ SecurityPropertiesสำหรับข้อมูลเพิ่มเติมโปรดดูที่


5
ใน Spring Boot 2.x วิธีนี้เลิกใช้แล้ว "การกำหนดค่าความปลอดภัยอัตโนมัติไม่สามารถปรับแต่งได้อีกต่อไปโปรดระบุ WebSecurityConfigurer bean ของคุณเองแทน"
mrkernelpanic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.