同源策略与安全
2016-07-28 11:00
183 查看
同源策略:
同源策略是对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
同源策略是对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
相关文章推荐
- Ubuntu禁止普通用户通过sudo -i 或 sudo -s进入root模式解决办法
- sql优化(面试必问一)
- POJ 3349 Snowflake Snow Snowflakes(hash表的使用)(环状问题的解决)
- 习题32 循环和列表
- 享元模式
- iOS OC Quartz学习笔记(一)
- javascript跨域的4种方法和原理详解
- easyUI 日期控件修改...
- Eclipse 使用技巧之 ---- 查看本类调用和被调用列表
- 详解Linux Initrd
- WEB服务器、应用程序服务器、HTTP服务器区别
- List list = new ArrayList();和ArrayList list=new ArrayList();的区别
- 让你的创业失败的18个昏招
- 让你的创业失败的18个昏招
- linux PATH环境变量全解析--转自http://www.2cto.com
- 工作中用到的一些批处理
- android开发之一如何升级SDK
- Android判断非系统应用
- OC和C++混编 系统类NSObjCRuntime, NSZone等报错问题
- HTML学习04-HTML文本格式化