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

Bravo
fuente
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.

vtor
fuente
¿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();
cinco perros
fuente
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();
Kamwo
fuente
¿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>
Matthew Kirkley
fuente
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()
      ...;
  }
}
FuSsA
fuente
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.

Ali Dehghani
fuente
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