浏览器特性与安全策略
同源策略
同源策略规定:不同域的客户端脚本在没有明确授权的情况下,不能读写对象的资源。
同源和异源
不同域
- 协议不同(HTTP与HTTPS)
- 域名不同(顶级域,www域和子域)
- 端口不同(比如80端口和81端口)
同域
- 多了目录,符号协议,域名,端口都相同
网页授权
通过HTTP响应头返回字段设置的,设置字段如下:Access-Controll-Allow-Origin: http://www.demo.com
沙盒框架(Sandboxed frame)
是对常规
<iframe>表现行为的扩展,它能让顶级页面对其嵌入的子页面及这些子页面的子资源设置一些额外的限制通过
<iframe>的参数实现限制Allow-scripts:是否允许执行javascript脚本,没有则不允许Allow-forms: 是否允许使用form表单,没有则不允许Allow-top-navigation: 是否允许嵌入子页面控制顶级窗口的地址跳转,没有则不允许Allow-same-origin: 是否允许访问同源数据,没有则不允许
Flash安全沙箱
- 分为本地沙箱与远程沙箱
- 类似同源策略,在同一域内的资源会被放到一个安全组下,称为安全沙箱
Web站点通过crossdomain.xml文件配置可以提供允许的跨域访问本域上内容的权限(放置于站点根目录)
<cross-domain-policy> <allow-access-form domain=".youku.com" /> </cross-domain-policy>
Cookie的安全策略
Domain用于指定Cookie的有效域Path用于指定Cookie的有效URL路径Secure如果设置该属性,仅在HTTPS请求中提交CookieHttp其实是HttpOnly, 如果设置该属性,客户端javascript无法获取Cookie的值
内容安全策略 (Content Security Polity, CSP)
通过编码在HTTP响应头中的指令来实施策略
Content-Security-Polity:script-src 'self' https://baidu.comCSP的一些指令
default-src: 该指令在某种资源类型指定指令没有被定义的情况下制定了所有资源类型的加载策略(即默认的资源加载策略)script-src: 该指令指定了Web应用程序可以加载的脚本的域或URLobject-src: 该指令制定了Web应用程序可以加载的插件,如Falshstyle-src: 该指令制定了Web应用程序可以加载的CSS样式表的域或URLimg-src: 该指令指定了Web应用程序可以加载的图片的域或URLmedia-src: 该指令指定了Web应用程序可以加载的音视频的域或URLframe-src: 该指令指定了Web应用程序可以加载的框架的域或URLfont-src: 该指令指定了Web应用程序可以加载的字体的域或URLconnect-src: 该指令指定了Web应用程序可以加载的像XHR, WebSockets, 以及EventSource等脚本接口的域或URLplugin-types: 该指令指定了哪些MIME类型的插件可以被加载(浏览器支持度不够)form-action: 该指令指定了HTML表单可以提交的URLS(浏览器支持度不够)reflected-xss: 该指令告诉浏览器开启或关闭任何用于过滤或组织反射跨站脚本攻击的启发式算法,这相当于X-XSS-Protection响应头的效果(浏览器支持度不够)