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


89

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 comme un charme. Comment puis-je désactiver cela dans le fichier XML de sécurité Spring? Que dois-je écrire entre les <http>balises


1
Aucune des réponses ci-dessous n'indique encore s'il est possible d'appliquer SAMEORIGIN ou AUTORISER au niveau de la méthode du contrôleur - quelqu'un le sait?
— Noir

Réponses:


111

Par défaut, il X-Frame-Optionsest défini sur refusé pour éviter les attaques de détournement de clic . Pour remplacer cela, vous pouvez ajouter ce qui suit dans votre configuration de sécurité de printemps

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

Voici les options disponibles pour la politique

  • DENY - 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 soit (et puisse être) affichée dans un cadre sur la même origine que 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, jetez un œil ici .

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

Notez que vous devrez peut-être également spécifier les informations appropriées strategy, en fonction des besoins.


Quel est l'espace de noms pour ceci httpet les headersbalises?
— Pasupathi Rajamanickam

4
Est-il possible de l'appliquer comme niveau de méthode du contrôleur?
— mad_fox

4
Si vous devez le configurer dans la méthode de configuration de WebSecurityConfigurerAdapter, écrivez le code suivant:http.headers().frameOptions().sameOrigin();
— russellhoff

@vtor J'utilise le printemps 3.1 et cela n'est pas pris en charge, une solution de contournement que vous pourriez suggérer?
— Printemps

@Spring docs.spring.io/spring-security/site/docs/current/reference/html/… il est pris en charge. Pourriez-vous s'il vous plaît partager ce que vous avez essayé et ce qui n'a pas fonctionné?
— vtor le

102

Si vous utilisez des configurations Java au lieu de configurations XML, mettez ceci dans votre WebSecurityConfigurerAdapter.configure(HttpSecurity http)méthode:

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

34
Utiliser disable () est une option, mais si c'est sur le même serveur, utilisezhttp.headers().frameOptions().sameOrigin();
— Ian Newland

59

Il est fort probable que vous ne souhaitiez pas désactiver complètement cet en-tête, mais utilisez SAMEORIGIN. Si vous utilisez Java Configs ( Spring Boot) et que vous souhaitez autoriser les X-Frame-Options :, SAMEORIGINalors vous devez utiliser ce qui suit.


Pour les anciennes versions de Spring Security:

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

Pour les versions plus récentes comme Spring Security 4.0.2 :

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

Comment configurer cela au printemps 3.2.12?
— Pasupathi Rajamanickam

1
Migrer de 3.X vers 4.X et a rencontré ceci car il venait juste d'ajouter sur la base du premier exemple. Merci.
— steve

18

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>

11

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()
      ...;
  }
}

9

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 des security.headers.*propriétés. En particulier, si vous souhaitez désactiver l'en- X-Frame-Optionstête par défaut, ajoutez simplement ce qui suit à votre application.properties:

security.headers.frame=false

Il y a aussi security.headers.cache, security.headers.content-type, security.headers.hstset les security.headers.xsspropriétés que vous pouvez utiliser. Pour plus d'informations, jetez un œil à SecurityProperties.


5
Dans Spring Boot 2.x, cette méthode est obsolète. "La configuration automatique de la sécurité n'est plus personnalisable. Fournissez votre propre bean WebSecurityConfigurer à la place."
— mrkernelpanic
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.