Como desabilitar o cabeçalho de resposta 'X-Frame-Options' no Spring Security?

91

Eu tenho o CKeditor em meu jsp e sempre que faço upload de algo, o seguinte erro aparece:

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

Tentei remover o Spring Security e tudo funciona perfeitamente. Como posso desativar isso no arquivo xml do Spring Security? O que devo escrever entre as <http>tags

Bravo
fonte
1
Nenhuma das respostas abaixo ainda aborda se é possível aplicar SAMEORIGIN ou ALLOW no nível do método do controlador - alguém sabe?
Negro,

Respostas:

113

Por padrão, X-Frame-Optionsé definido como negado, para evitar ataques de clickjacking . Para substituir isso, você pode adicionar o seguinte em sua configuração de segurança do Spring

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

Aqui estão as opções disponíveis para política

  • NEGAR - é um valor padrão. Com isso, a página não pode ser exibida em um quadro, independentemente da tentativa do site.
  • SAMEORIGIN - Presumo que seja isso que você está procurando, para que a página seja (e possa ser) exibida em um quadro na mesma origem da própria página
  • ALLOW-FROM - Permite que você especifique uma origem, onde a página pode ser exibida em um quadro.

Para mais informações, dê uma olhada aqui .

E aqui para verificar como você pode configurar os cabeçalhos usando configurações XML ou Java.

Observe que você também pode precisar especificar apropriado strategy, com base nas necessidades.

vtor
fonte
Qual é o namespace para isso httpe headerstags?
Pasupathi Rajamanickam
4
É possível aplicar isso como o nível de método do controlador?
mad_fox
5
Se você precisar configurá-lo no método de configuração de WebSecurityConfigurerAdapter, escreva o seguinte código:http.headers().frameOptions().sameOrigin();
russellhoff
@vtor Eu uso o Spring 3.1 e isso não é compatível. Alguma solução alternativa que você possa sugerir?
Primavera de
@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… é compatível. Você poderia compartilhar o que tentou e não funcionou?
vtor
105

Se você estiver usando configurações Java em vez de configurações XML, coloque isso em seu WebSecurityConfigurerAdapter.configure(HttpSecurity http)método:

http.headers().frameOptions().disable();
fivedogit
fonte
36
Usar disable () é uma opção, mas se estiver no mesmo servidor, usehttp.headers().frameOptions().sameOrigin();
Ian Newland
60

Provavelmente você não deseja desativar este cabeçalho completamente, mas use SAMEORIGIN. Se você estiver usando Java Configs ( Spring Boot) e quiser permitir X-Frame-Options SAMEORIGIN:, será necessário usar o seguinte.


Para versões anteriores do Spring Security:

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

Para versões mais recentes como Spring Security 4.0.2 :

http
   .headers()
      .frameOptions()
         .sameOrigin();
Kamwo
fonte
Como configurar isso no Spring 3.2.12?
Pasupathi Rajamanickam
1
Migrando de 3.X para 4.X e encontrei isso porque estava apenas acrescentando com base no primeiro exemplo. THX.
Steve
18

Se estiver usando a configuração XML, você pode 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
fonte
11

Se você estiver usando a configuração Java do Spring Security, todos os cabeçalhos de segurança padrão são adicionados por padrão. Eles podem ser desativados usando a configuração Java abaixo:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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

Se você estiver usando Spring Boot, a maneira mais simples de desabilitar os cabeçalhos padrão do Spring Security é usar as security.headers.*propriedades. Em particular, se você deseja desativar o X-Frame-Optionscabeçalho padrão, basta adicionar o seguinte ao seu application.properties:

security.headers.frame=false

Há também security.headers.cache, security.headers.content-type, security.headers.hstse security.headers.xsspropriedades que você pode usar. Para obter mais informações, dê uma olhada em SecurityProperties.

Ali Dehghani
fonte
5
No Spring Boot 2.x, esse método está obsoleto. "A configuração automática de segurança não é mais personalizável. Em vez disso, forneça seu próprio bean WebSecurityConfigurer."
mrkernelpanic de