Fork me on GitHub

Content Security Policy Accès sélectif aux ressources cross-domain

Content Security Policy

Problème : Comment mieux circonscrire les dangers d’un XSS ?

CSP restreint les actions sur la base du domaine d’origine, au niveau de HTTP :

Ce que l’on peut restreindre

  • JavaScript inlined, eval, CSS, transformations XSLT, Web Fonts ;
  • Sources pour les balises HTML : <script>, <object>, <embed>, <style>, <img>, <audio>, <video>, <iframe> ;
  • Sources pour les APIs DOM : XMLHttpRequest, WebSockets, Server events.

Standard depuis février 2015, voir : http://www.w3.org/TR/CSP/#sotd

Exemple de CSP…

HTTP/1.1 200 OK
...
Content-Security-Policy: default-src 'self';
                         img-src *;
                         object-src media.example.com
                                    *.cdn.example.com;
                         script-src https://js.example.com;
                         connect-src https:

Les balises <img> sont toujours permises

<img src="http://farm1.staticflickr.com/1/xxxxxxxxxx.jpg" />

Les plugins sont autorisés uniquement sur certains sous-domaines

<object data="http://media.example.com/video.swf"></object>

…Exemple de CSP

<script> permises uniquement sur https://js.example.com

<script src="https://js.example.com/jquery.min.js"></script>

AJAX est permis uniquement sur SSL

var xhr = new XMLHttpRequest()
xhr.open("GET", "https://api.finance.com/cac40?c=total")

Tout autre contenu est permis uniquement en provenance de la même page

Problème: CSP est une protection opt-in. Elle doit être configurée explicitement par le server.

Lectures