`
架构师
  • 浏览: 54518 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

同一生成元策略/同源策略 Same-origin policy

阅读更多
在了解XSS攻击的时候遇到了 Same-origin policy的概念,日文是同一生成元Policy,中文的译法是同源策略。

Same-origin policy

这个概念的由来:因为JavaScript是世界上最不安全的语言,实际应用中肯定会对它的权限做一些限制。Same-origin policy便是限制JavaScript代码权限的一种策略,浏览器都会遵守的。

因为JavaScript太灵活,用得太乱,明明打开的是A网站,却可能有B网站的JavaScript在A的页面上运行! 有了同源策略,可以限制来自B网站的JS代码的权限。

我的理解是,这里B网站的JS脚本实际上还是可以执行,并不是说完全不能执行。那么同源策略做了什么限制呢?查了网上的资料,好像是说“修改A网站HTML”的操作会被禁止。比如说B网站的脚本里面有document.write,想修改A网站的页面内容。而又有资料说,这种限制也可以被放宽(一个页面上显示了来自另一个网站的内容,这个确实很常见,没有被禁止)。还有的说法是,打开两个标签页,同源策略是禁止一个标签页的JS代码访问另一个标签页中的内容,这个也太扯了吧? 总之没实际动手做过的话,很难体会。

同源策略的两个常见用途:一个是cookie,一个是XMLHttpRequest。

Cookie
B网站的脚本在A网站上面执行,可以做很多事情,可以getElementById等等,获取A网站页面上的信息。那么很自然想到,也可以获取A网站的cookie信息,这就导致用户隐私泄露了。

解决办法是,浏览器会遵守同源策略,如果B网站的脚本想获得A网站的cookie,会被浏览器拒绝执行。

所以,原理实际上很简单。很多安全漏洞,无非是浏览器说了算,浏览器让你这么干,你就可以这么干,出现漏洞,很简单,改成浏览器不让你这么干就行了。

XMLHttpRequest
即Ajax函数只能向当前页面所在域名发送请求。也就是说,iteye.com网页的Ajax代码,只能与iteye的服务器通讯,从iteye的服务器获取数据,而不能连到csdn去(浏览器会拒绝执行,发送不出这个请求)。


厂商与历史

很多安全漏洞的东西,都是一开始没发现,发现了之后才由厂商制定标准,进行修补的。同源策略便是由网景公司提出并实现。(Netscape Navigator 2.0)

后来,肯定又出现了更新颖,更先进的窃取cookie信息的方法,所以后来微软的IE 6.0浏览器又搞出来新的修补措施,就是cookie的HTTP-ONLY属性,不管你是哪个网站,都不让读cookie了。按照网景公司取的名字Same-origin policy,不妨称微软公司这一招为 No-origin policy。

总之,JavaScript的发展就是一路修修补补,哪里出漏洞,就在那里亡羊补牢。
分享到:
评论

相关推荐

    中文版RFC文档

    来自以下<br/>组织:中国互动出版网(http://www.china-pub.com/)<br/>RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)<br/>E-mail:ouyang@china-pub.com<br/>译者:charliechen...

    彻底解决usb错误-device descriptor read/64, error -62

    通过调整PLL设置,确保48MHz时钟正确生成是解决问题的关键。 2. **驱动程序实现问题**:在2.6版本的Linux内核中,USB驱动程序的设计遵循了规范,将大部分通用操作放在了核心部分,而特定于主机控制器的部分则放在...

    spring_MVC源码

    建好表后,生成实体类 [java] view plaincopy 01.package com.mvc.entity; 02. 03.import java.io.Serializable; 04. 05.import javax.persistence.Basic; 06.import javax.persistence.Column; 07....

    JSONObject必包的Jar包及json生成的简单案例

    JSONObject必包的Jar包及json生成的简单案例 所有commons包的网址: http://commons.apache.org/index.html 组装和解析JSONObject的Json字符串,共需要下面六个包: 1、json-lib 2、commons-beanutils 3、commons-...

    JCE文件jdk6, jdk7

    JCE无限制权限策略文件,里面是对应jdk6和7的文件 JCE(Java Cryptography Extension)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。

    arm-linux-gcc-4.4.3.tar.gz

    交叉编译是使用一套特定平台的编译工具链(比如在x86架构的Ubuntu系统上),生成适用于另一平台(例如ARM架构的嵌入式设备)的可执行程序的过程。在这个场景中,`arm-linux-gcc`是我们的交叉编译器,它能将源代码...

    xscan

    含义:检测"host.lst"文件中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机; 七. 插件接口: /* 该函数在初始化...

    jackson-2.6.jar

    2. **jackson-core-2.6.0-rc4.jar**:这个模块提供了基本的JSON解析和生成能力,包括流式API(如`JsonParser`和`JsonGenerator`)以及树模型API(如`JsonNode`)。在处理大量数据或需要底层控制JSON生成和解析时,这...

    文档分享网站(文档上传、在线预览、下载)使用jsp+mysql

    在后台,JSP会处理文件上传请求,将文件保存到服务器的指定位置,并将相关元数据(如文件名、大小、创建日期、上传者等)存储到数据库中。为了防止非法文件上传和恶意攻击,系统通常会进行文件类型检查和大小限制。 ...

    osworkflow源码

    osWorkflow 具有良好的扩展性,开发者可以通过实现特定接口来扩展其功能,例如自定义任务类型、参与者选择策略、事件处理器等。此外,osWorkflow 还提供了API,允许与其他系统集成,如Spring、Hibernate等。 **5. ...

    一个有趣的回溯算法

    生成所有组合对顺序没有要求,即a+b 和 b+a可以当同一条,不用重复出现 我写了一个回溯算法,结果有1.7G,Petium4算了5分钟,所以此算法只可学习,不可实践啊。。 详细请看:...

    JAVA打包成可运行的JAR程序

    最后,将生成的 JAR 文件和配置文件、LIB 包里的引用文件放到同一文件夹内,即可执行。 首先,需要将依赖的 lib 包和配置文件放在 src 工程目录下,而不是 src 内。这是因为,在生成 JAR 文件时,需要将这些文件...

    jce_policy-1_4_2.zip

    "jce_policy-1_4_2.zip"这个压缩包中包含的JCE无限制强度策略文件,能够解除这些限制,允许使用更长的密钥长度进行加密操作,从而提高安全性。这些策略文件通常分为两部分:本地政策文件和US_export_policy.jar,...

    jce_policy-8.zip

    描述 "jce_policy-8.zip" 提示这是一个包含JCE无限强度加密策略文件的压缩包。在默认情况下,Java的JCE有加密强度限制,以遵守某些国家的出口法规。然而,"UnlimitedJCEPolicyJDK8" 这个文件名表明,这些策略文件...

    posman-4.7.0-Crx4Chrome.com

    postman4.70 后台api开发神器。get,post,put,delete等调用方式.并支持自动生成代码.postman使用教程:http://blog.csdn.net/qazwsxpcm/article/details/70578600

    auto-factory-0.1-beta1.zip

    postgres-hibernate-mapper.zip,Postgre Hibernate Mapper是处理默认Hibernate ID生成策略的小项目。Postgre-Hibernate-Mapper是解决此问题的小项目...

    请求跨域的解决方案.docx

    当一个Web应用尝试从一个不同的源(域名、协议或端口)请求资源时,浏览器会根据同源策略(Same-Origin Policy)限制这种行为,以防止恶意网站窃取数据。然而,随着Web应用的发展,跨域数据交互变得越来越普遍,这就...

    Laravel开发-asasi-policy

    在Laravel框架中,策略(Policy)是一种强大的授权机制,用于管理用户对资源的访问权限。"Laravel开发-asasi-policy ASASI HTTP库"这个标题表明我们正在探讨一个与Laravel开发相关的项目,特别是关于使用ASASI HTTP...

    code - lecture 7 - policy gradient_policy_Reinforcement_policygr

    在强化学习领域,"Policy Gradient" 是一种常用的学习策略,用于优化智能体在环境中执行动作的策略。在本次"code - lecture 7 - policy gradient_policy_Reinforcement_policygr"的主题中,我们将深入探讨策略梯度...

Global site tag (gtag.js) - Google Analytics