web-dev-qa-db-fra.com

Comment désactiver l'en-tête de réponse 'X-Frame-Options' dans Spring Security?

J'ai CKeditor sur mon jsp et chaque fois que je télécharge quelque chose, l'erreur suivante apparaît:

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

J'ai essayé de supprimer Spring Security et tout fonctionne à merveille. Comment puis-je désactiver ceci dans le fichier XML de sécurité de printemps? Que devrais-je écrire entre les balises <http>

71
Bravo

Par défaut, X-Frame-Options est défini sur refusé pour empêcher les attaques clickjacking . Pour annuler cela, vous pouvez ajouter ce qui suit dans votre configuration de sécurité Spring

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

Voici les options disponibles pour la politique

  • NIER - est une valeur par défaut. Avec cela, la page ne peut pas être affichée dans un cadre, quel que soit le site qui tente de le faire.
  • SAMEORIGIN - Je suppose que c'est ce que vous recherchez, de sorte que la page s'affiche (et puisse être) affichée dans un cadre identique. Origine comme la page elle-même
  • ALLOW-FROM - Vous permet de spécifier une origine, où la page peut être affichée dans un cadre.

Pour plus d'informations jeter un oeil ici .

Et here pour vérifier comment vous pouvez configurer les en-têtes à l'aide de XML ou de Java configs.

Notez que vous devrez peut-être également spécifier le paramètre approprié strategy, en fonction des besoins.

100
vtor

Si vous utilisez les configurations Java à la place des configurations XML, mettez ceci dans votre méthode WebSecurityConfigurerAdapter.configure(HttpSecurity http):

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

Très probablement, vous ne souhaitez pas désactiver complètement cet en-tête, mais utilisez SAMEORIGIN. Si vous utilisez les Java Configs (Spring Boot) et souhaitez autoriser les X-Frame-Options: SAMEORIGIN, vous devez utiliser les éléments suivants.


Pour les anciennes versions de Spring Security:

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

Pour les versions plus récentes telles que Spring Security 4.0.2 :

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

Si vous utilisez la configuration XML, vous pouvez utiliser

<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>
16
Matthew Kirkley

Si vous utilisez Spring Boot, le moyen le plus simple de désactiver les en-têtes par défaut de Spring Security consiste à utiliser les propriétés security.headers.*. En particulier, si vous souhaitez désactiver l'en-tête par défaut X-Frame-Options, ajoutez ce qui suit à votre application.properties:

security.headers.frame=false

Il existe également les propriétés security.headers.cache, security.headers.content-type, security.headers.hsts et security.headers.xss que vous pouvez utiliser. Pour plus d'informations, consultez SecurityProperties .

9
Ali Dehghani

Si vous utilisez la configuration Java de Spring Security, tous les en-têtes de sécurité par défaut sont ajoutés par défaut. Ils peuvent être désactivés à l'aide de la configuration Java ci-dessous:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

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