web-dev-qa-db-fra.com

Prévention XSS via la politique de sécurité du contenu

Comment la politique de sécurité du contenu (CSP) peut-elle réduire considérablement le risque et l'impact des attaques XSS dans les navigateurs modernes?

Est-il possible de contourner CSP pour exécuter XSS?

28
Ali Ahmad

Oui, CSP fait beaucoup pour se défendre contre XSS. Si vous effectuez une recherche Google sur "Content Security Policy XSS", les premiers liens expliquent comment et pourquoi.

Si vous rencontrez des difficultés à utiliser Google, voici quelques bons liens pour vous aider à expliquer comment CSP se défend contre XSS:

La politique CSP est appliquée par le navigateur. Par conséquent, en supposant que vous avez défini une stratégie CSP appropriée et en supposant que votre navigateur n'a pas de bogues, il n'y a aucun moyen de contourner CSP. C'est l'une des attractions du CSP.

Notez que certains navigateurs (par exemple, IE10 et les versions antérieures d'IE, si je me souviens bien) ne prennent pas en charge CSP.

Soyez averti que le CSP n'est pas une solution miracle:

  • CSP n'arrête pas XSS basé sur DOM (également connu sous le nom de XSS côté client) si vous activez "unsafe-eval" dans votre stratégie CSP. Pour empêcher XSS basé sur DOM, vous devez écrire votre Javascript avec soin pour éviter d'introduire de telles vulnérabilités.

  • CSP arrête la plupart des formes d'injection de script, mais il n'arrête pas l'injection de balisage: voir, par exemple, Cartes postales du monde post-XSS ainsi que l'attaque par injection de formulaire HTML de la section III-A de - Auto-exfiltration: les dangers du contrôle du flux d'informations par navigateur (Chen et al, W2SP 2012). Donc, vous voudrez toujours éviter d'introduire des bogues d'injection dans votre code.

Voir aussi Quelques choses au-delà de la portée de la politique de sécurité du conten pour plus de discussion sur certains problèmes que le CSP ne résout pas.

20
D.W.

Le CSP fonctionne en imposant que certaines politiques de contenu soient placées sur des scripts, par exemple "pas de scripts externes" ou "pas de scripts en ligne". Cela rend XSS beaucoup plus difficile, car 99% des cas XSS impliquent des scripts en ligne ou des références à des scripts hors site. Le seul inconvénient est qu'il interdit à peu près complètement JavaScript, et il peut être très difficile de produire un site compatible JavaScript qui adhère au CSP.

Le contournement peut être possible, selon la politique utilisée et le type de vulnérabilité que vous avez, mais en général c'est un système assez solide. Pour les sites au contenu sensible et sans JavaScript, je recommande fortement de définir une politique restrictive.

3
Polynomial