Protection contre les attaques communes
Injection SQL
- Par défaut les requêtes créer par
Hibernatesont sécuritaires contre l'injection SQL. - Les requêtes personnalisées qu'on crée dans un repository utilisant Spring Data JPA ne permettent généralement pas la concaténation directe et sont résistantes à l'injection SQL.
- Attention aux projets n'utilisant pas un ORM, on écrit alors généralement nos propres requêtes. Veillez à utiliser des requêtes préparées pour ajouter des paramètres provenent de l'utilisateur et non la concaténation de chaîne.
Attaques CSRF
- Spring Security active par défaut la protection CSRF
-
Pour spécifier qu'on veut utiliser la configuration par défaut, on peut ajouter à notre filtre de sécurité
-
Pour désactiver la protextion CSRF sur certaines routes
-
Pour ajouter manuellement un jeton CSRF à un formulaire
Protection XSS et CSP
Pour aider à nou protéger des attaques CSRF et pour garantir que les éléments chargés sur les pages proviennent de sources sécusitaires, on pourra configurer différentes en-têtes HTTP.
Dans le filtre de sécurité, on pourra ajouter
.headers(headers -> headers
.xssProtection(xss -> xss
.headerValue(XXssProtectionHeaderWriter.HeaderValue.ENABLED_MODE_BLOCK)
)
);
Pour augmenter la protection contre les attaques XSS.
Attention, cela ne remplace pas les pratiques à ajouter sur les pages pour se protéger des attaques XSS. C'est une protection supplémentaire.
On peut également indiquer les sources de confiance en configurant une politique de sécurité du contenu (Content Security Policy -- CSP).
On ajoutera ensuite à la section headers du filtre de sécurité les instructions de configuration de la politique.
.headers(headers -> headers
.contentSecurityPolicy(csp -> csp
.policyDirectives("script-src 'self' https://trustedscripts.example.com; object-src https://trustedplugins.example.com; report-uri /csp-report-endpoint/")
)
);
On pourra donc indiquer les sources de confiance à notre application:
script-src- Les adresses des scripts de confiance
- Adresse des CDN
selfest un script provenant de l'application elle-même.selfne permet pas les scripts au travers du code HTML. Le script doit être chargé d'un fichier.