HTTP 的内容安全策略(CSP)
本文介绍的是W3C的Content Security Policy,简称CSP。望文生义,这个规范与内容安全有关,首要是用来界说页面能够加载哪些资源,削减XSS的发作。
Chrome扩展现已引进了CSP,经过manifest.json中的content_security_policy字段来界说。一些现代浏览器也支撑经过呼应头来界说CSP。下面咱们首要介绍怎么经过呼应头来运用CSP,Chrome扩展中CSP的运用能够参阅Chrome官方文档。
浏览器兼容性
前期的Chrome是经过X-WebKit-CSP呼应头来支撑CSP的,而firefox和IE则支撑X-Content-Security-Policy,Chrome25和Firefox23开端支撑规范的的Content-Security-Policy,见下表。
呼应头 Chrome Firefox Safari IE Content-Security-Policy 25+ 23+ - - X-Content-Security-Policy - 4.0+ - 10.0(有限的) X-Webkit-CSP 14+ - 6+ -
完好的浏览器CSP支撑状况请移步CanIUse。
怎么运用
要运用CSP,只需要服务端输出相似这样的呼应头就行了:
Content-Security-Policy: default-src 'self'default-src是CSP指令,多个指令之间用英文分号切割;'self'是指令值,多个指令值用英文空格切割。现在,有这些CSP指令:
指令 指令值示例 阐明 default-src 'self' cnd.a.com 界说针对一切类型(js、image、css、web font,ajax恳求,iframe,多媒体等)资源的默许加载战略,某类型资源假如没有独自界说战略,就运用默许的。 script-src 'self' js.a.com 界说针对JavaScript的加载战略。 style-src 'self' css.a.com 界说针对款式的加载战略。 img-src 'self' img.a.com 界说针对图片的加载战略。 connect-src 'self' 针对Ajax、WebSocket等恳求的加载战略。不答应的状况下,浏览器会模仿一个状况为400的呼应。 font-src font.a.com 针对Web Font的加载战略。 object-src 'self' 针对<object>、<embed>或<applet>等标签引进的flash等插件的加载战略。 media-src media.a.com 针对<audio>或<video>等标签引进的html多媒体的加载战略。 frame-src 'self' 针对frame的加载战略。 sandbox allow-forms 对恳求的资源启用sandbox(相似于iframe的sandbox特点)。 report-uri /report-uri 告知浏览器假如恳求的资源不被战略答应时,往哪个地址提交日志信息。 特别的:假如想让浏览器只报告日志,不阻挠任何内容,能够改用Content-Security-Policy-Report-Only头。
指令值能够由下面这些内容组成:
指令值 指令示例 阐明 img-src 答应任何内容。 'none' img-src 'none' 不答应任何内容。 'self' img-src 'self' 答应来自相同来历的内容(相同的协议、域名和端口)。 data img-src data 答应data:协议(如base64编码的图片)。 www.a.com img-src img.a.com 答应加载指定域名的资源。 *.a.com img-src *.a.com 答应加载a.com任何子域的资源。 https://img.com img-src https://img.com 答应加载img.com的https资源(协议需匹配)。 https: img-src https: 答应加载https资源。 'unsafe-inline' script-src 'unsafe-inline' 答应加载inline资源(例如常见的style特点,onclick,inline js和inline css等等)。 'unsafe-eval' script-src 'unsafe-eval' 答应加载动态js代码,例如eval()。
[1] [2] 黑客接单网