¿Cómo deshabilitar el encabezado de respuesta 'X-Frame-Options' en Spring Security?


89

Tengo CKeditor en mi jsp y cada vez que subo algo, aparece el siguiente error:

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

He intentado eliminar Spring Security y todo funciona a la perfección. ¿Cómo puedo deshabilitar esto en el archivo xml de seguridad de primavera? ¿Qué debo escribir entre <http>etiquetas?


1
Ninguna de las respuestas a continuación aborda aún si es posible aplicar SAMEORIGIN o ALLOW en el nivel del método del controlador, ¿alguien lo sabe?
— Negro

Respuestas:


111

De forma predeterminada, X-Frame-Optionsestá establecido en denegado, para evitar ataques de secuestro de clics . Para anular esto, puede agregar lo siguiente en su configuración de seguridad de primavera

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

Aquí están las opciones disponibles para la política

  • DENY : es un valor predeterminado. Con esto, la página no se puede mostrar en un marco, independientemente del sitio que intente hacerlo.
  • SAMEORIGIN : supongo que esto es lo que está buscando, de modo que la página se mostrará (y puede) mostrarse en un marco en el mismo origen que la página en sí
  • PERMITIR DESDE : le permite especificar un origen, donde la página se puede mostrar en un marco.

Para obtener más información, eche un vistazo aquí .

Y aquí para comprobar cómo puede configurar los encabezados utilizando configuraciones XML o Java.

Tenga en cuenta que es posible que también deba especificar lo apropiado strategy, según las necesidades.


¿Cuál es el espacio de nombres para estas etiquetas httpy headers?
— Pasupathi Rajamanickam

4
¿Es posible aplicar esto como nivel de método de controlador?
— mad_fox

4
Si necesita configurarlo dentro del método de configuración de WebSecurityConfigurerAdapter, escriba el siguiente código:http.headers().frameOptions().sameOrigin();
— russellhoff

@vtor Utilizo Spring 3.1 y esto no es compatible, ¿alguna solución alternativa que pueda sugerir?
— Primavera

@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… es compatible. ¿Podría compartir lo que intentó y no funcionó?
— vtor

102

Si está utilizando configuraciones de Java en lugar de configuraciones XML, coloque esto en su WebSecurityConfigurerAdapter.configure(HttpSecurity http)método:

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

34
El uso de disable () es una opción, pero si está en el mismo servidor, usehttp.headers().frameOptions().sameOrigin();
— Ian Newland

59

Lo más probable es que no desee desactivar este encabezado por completo, pero use SAMEORIGIN. Si está utilizando Java Configs ( Spring Boot) y le gustaría permitir X-Frame-Options : SAMEORIGIN, entonces necesitaría usar lo siguiente.


Para versiones anteriores de Spring Security:

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

Para versiones más recientes como Spring Security 4.0.2 :

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

¿Cómo configurar esto en Spring 3.2.12?
— Pasupathi Rajamanickam

1
Migrando de 3.X a 4.X y me encontré con esto, ya que solo se agregaba según el primer ejemplo. gracias.
— Steve

18

Si usa la configuración XML, puede usar

<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

Si está utilizando la configuración de Java de Spring Security, todos los encabezados de seguridad predeterminados se agregan de forma predeterminada. Se pueden deshabilitar utilizando la configuración de Java a continuación:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

9

Si está usando Spring Boot, la forma más sencilla de deshabilitar los encabezados predeterminados de Spring Security es usar security.headers.*propiedades. En particular, si desea deshabilitar el X-Frame-Optionsencabezado predeterminado, simplemente agregue lo siguiente a su application.properties:

security.headers.frame=false

También hay security.headers.cache, security.headers.content-type, security.headers.hstsy security.headers.xsspropiedades que se pueden utilizar. Para obtener más información, consulte SecurityProperties.


5
En Spring Boot 2.x, este método está obsoleto. "La configuración automática de seguridad ya no se puede personalizar. Proporcione su propio bean WebSecurityConfigurer en su lugar".
— mrkernelpanic
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.