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

Bravo
la source
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.

vtor
la source
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();
fivedogit
la source
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();
kamwo
la source
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>
Matthew Kirkley
la source
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()
      ...;
  }
}
FuSsA
la source
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.

Ali Dehghani
la source
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