同源策略:
同源策略是对JavaScript代码能够操作那些Web内容的一条完整的安全策略。
当页面使用多个<iframe>元素或打开其他窗口的时候,同源策略就会发挥作用,它管理着不同的窗口、窗体、代码之间的交互;在同源策略之下,脚本代码只能读取和自己同源的窗口、窗体中的文档;
文档来源区别:协议、主机、载入文档的URL端口,有一项不同则不同源;
脚本本身的来源与同源策略无关,相关的是脚本所嵌入的文档的来源,脚本可以访问和它所嵌入的文档同源的资源;脚本虽然可以打开和关闭一个用来载入不同源文档的新窗口,但不能访问该窗口的任何内容;
不严格的同源策略:
1.在使用多个子域的大站点,可使用不严格的同源策略(将不同源的文档的Document的domain属性设为相同的值,那么这些文档就不在受同源策略的约束,它们将属于同源,可以互相通信;
2.跨域资源共享 Cross- Origin Resource Sharing, 参见 http:// www. w3. org/ TR/ cors/,这个准草案用新的“ Origin:” 请求和新的Access- Control- Allow- Origin响应头来扩展HTTP。它允许服务器用头信息显式地列出源,或使用通配符来匹配所有的源并允许由任何地址请求文件。
3.跨文档消息( cross- document messaging),允许来自一个文档的脚本可以传递文本消息到 另一个文档里的脚本,而不管脚本的来源是否不同。调用Window对象上的postMessage()方法, 可以异步传递消息事件(可以用onmessage事件句处理程序函数来处理它)到窗口的文档里。
跨站脚本:XSS
跨站脚本:(Cross-site scripting)XSS,表示一类安全问题,攻击者向目标Web站点注入HTML标签或脚本。
通常,防止XSS攻击的方式是,在使用任何不可信的数据来动态的创建文档内容之前,从中 移除HTML标签。通过添加如下一行代码来移除<script>标签两边的尖括号,
var name = decodeURIComponent(window.location.search.substring(1)) || '';
name = name.replace(/</g,"<").replace(/>/g,">");
document.write('Hello ' + name);
当读取这个被注入了脚本的URL时,过滤掉HTML标签就能‘消毒’了
http://siteA/greet.html?name=%3Cscript src=siteB/evil. js%3E%3C/script%3E