#09.HTTP Security Header
以下几个HTPP Header可用于防止一些诸如反射性XSS,点击劫持之类的漏洞或提高攻击系统的难度。当然,并不是所有的浏览器都支持这些特征,但是为你的系统添加这些Header,既没有引入副作用同时又增加了攻击者攻击系统的难度,何乐而不为呢?
##9.1 Content-Security-Policy
简称“CSP”,用于指定客户浏览器可以加载哪些域名下的资源以及资源的类型(加载策略)。
CSP使用指令的方式指定加载的资源以及资源的类型。这些指令包括:
- default-src : 为所有的资源定义默认的加载策略,如果具体的资源类型没有指定加载策略则使用该缺省值;
- script-src : 定义哪些脚本可以被运行;
- object-src : 定义可以从哪里加载插件;
- style-src : 定义可以使用那些css文件;
- img-src : 定义可以从哪里加载图片;
- media-src : 定义可以从哪里加载视频和音频;
- frame-src :定义iframe可以加载那些资源;
- font-src : 定义可以从哪里加载字体文件;
- connect-src : 定义可以使用脚本文件加载哪些资源;
- form-action : 定义可以向哪些域提交form表单;
- sandbox : 指定沙箱策略用于保护资源;
- script-nonce : Define script execution by requiring the presence of the specified nonce on script elements,
- plugin-types : 定义可以被加载的插件列表以及插件类型;
- reflected-xss : 启动反射性XSS脚本检测以阻止反射性XSS脚本的执行,该指令与跟X-XSS-Protection头部同效果;
- report-uri : 指定一个URL,当客户端违反加载策略时向该URL发起请求;
##9.2 Frame-Options,X-Frame-Options
定义被保护的页面如何在框架(iframe或frameet)页面进行渲染。
- deny : 禁止在任何框架页面中进行渲染;
- sameorigin : 只允许在同域的框架页面进行渲染;
- allow-from :可以再指定域的框架页面进行渲染,例如Frame-Options : allow-from http://example.com;
##9.3 X-Content-Type-Options
// TODO 胡说八道,先这样吧
该属性只能取一个值,那就是“nosniff”,它可以阻止浏览器对下载的资源的MIME-TYPE进行智能判断。可以减少用户下载附件资源时,浏览器自作聪明进行MIME-TYPE判断,从而导致页面上的JavaScript等脚本被执行的风险。
例如,系统允许用户上传html页面,然后供其他用户进行下载,如果浏览器忽略服务器返回的Content-Type而固执得对MIME-TYPE进行判断时,可导致页面的脚本被执行。
##9.4 Strict-Transport-Security
##9.5 X-XSS-Protection
定义被保护的页面对XSS检测的行为。
通常只对反射型XSS有效。
X-XSS-Protection:0
关闭XSS检测;X-XSS-Protection:1; mode=block
启动XSS检测,当发现XSS攻击时停止页面的渲染;
默认情况下,X-XSS-Protection是开启的,也就是说,即使不设置该头部,浏览器默认会对XSS进行检测。不过为了避免用户通过非常手段重置该头部,建议在所有页面中统一添加该头部。
##9.6 Content-Security-Policy-Report-Only
##9.7 X-WebKit-CSP
##9.8 参考资料
- 4 HTTP SECURITY HEADERS YOU SHOULD ALWAYS BE USING:http://ibuildings.nl/blog/2013/03/4-http-security-headers-you-should-always-be-using
- OWASP:https://www.owasp.org/index.php/List_of_useful_HTTP_headers
- http://www.html5rocks.com/en/tutorials/security/content-security-policy/