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