文章目录
  1. 1. 同源策略
    1. 1.1. 何时生效
      1. 1.1.1. 文档来源判定
  2. 2. 严格的同源策略?
    1. 2.1. 1.网站存在多个子域
    2. 2.2. 2.跨资源共享(Corss-Origin Resource Sharing)
    3. 2.3. 3.跨文档消息(cross-document messaging)

同源策略

同源策略的存在限制了JS的释放范围

何时生效

当多个<iframe>标签或者打开其他浏览器窗口的时候策略生效
脚本只能读取和所属文档来源相同的窗口和文档的属性

文档来源判定

协议,主机,载入文档的URL端口

严格的同源策略?

在实际操作情况之下,同源策略并不能保证如此严格的条件.Example:

1.网站存在多个子域

例如a.exp.com需要读取来自b.exp.com的a.html里与b.html均加入
document.domain = "xxx.com"; 但是必须是共有的根域名,上则为exp.com,这样两个页面就可以互相操作了,也就实现了所谓的”跨域”.

2.跨资源共享(Corss-Origin Resource Sharing)

利用这个标准提供的”Origin”和对应的Access-Control-Allow-Origin: xxx.com来扩展http,可实现任意的http请求

3.跨文档消息(cross-document messaging)

这个功能可以使一个文档的脚本直接一步传输给目标文档并允许执行.利用postMessage()方法

##跨站脚本(XSS)
如果目标网页有存在html标签插入功能,而且后台并没有相应的过滤原则,则存在该风险.攻击者只需要加入XSS的Js脚本,通过src=hack.js插入或者直接执行js脚本

####简单的防御

1
name = name.replace(/</g, "&lt;").replace(/>/g, "&gt;");

针对于IE存在一个toStaticHTML()的API,可以过滤相当一部分的标签

####HTML5的安全策略
HTML5中<iframe>定义了一个sandbox属性,实现之后允许显示不可信内容,但自动禁用脚本

##DDoS
例子:

1
2
3
while(1){
window.open('about:blank', '', 'width=645,height=550'); //窗体大小不填则创建新标签,否则创建新窗体
}//请勿随便尝试= ,=

为了防止被聪明的浏览器检测到,使用window.setInterval()来保证自己的生存

文章目录
  1. 1. 同源策略
    1. 1.1. 何时生效
      1. 1.1.1. 文档来源判定
  2. 2. 严格的同源策略?
    1. 2.1. 1.网站存在多个子域
    2. 2.2. 2.跨资源共享(Corss-Origin Resource Sharing)
    3. 2.3. 3.跨文档消息(cross-document messaging)