`
架构师
  • 浏览: 54915 次
  • 性别: 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...

    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`是我们的交叉编译器,它能将源代码...

    gradle-6.7.1-all.zip

    Gradle6.5中引入的文件系统监视现在正式投入生产使用,启用此功能后,预期大型项目中的生成速度提高20%。此外,实验性的配置缓存也得到了改进,使早期采用者更容易进行故障排除。 此版本引入了Java工具链支持,使得...

    xscan

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

    IOS随机验证码

    在这个系统中,验证码通常包含一组随机生成的数字或字母,它们会以不可预测的方式排列,并且可能伴有背景色的变化和干扰线,以增加识别难度,从而确保只有真实的人能够正确输入验证码。 首先,我们要了解验证码的...

    cmake-3.25.1-windows-x86-64.mis

    它通过简洁的文本文件(CMakeLists.txt)来描述项目构建规则,并能生成针对不同编译器和构建环境的项目配置文件,如Visual Studio解决方案、Unix Makefiles、Xcode项目等。CMake-3.25.1-windows-x86_64.msi是专门为...

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

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

    osworkflow源码

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

    跨域请求解决方案源代码(JSONP,CORS)

    它的原理是利用`<script>`标签没有同源策略限制的特点,通过在目标服务器上生成一个动态的JavaScript文件,该文件返回的数据格式为JSON,但被包裹在一个函数调用中。客户端页面通过预先定义这个函数来接收并处理返回...

    winzip 19.5 简体中文注册码生成器

    这个是winzip19.5最新版本的注册机,支持中文名生成注册码,同时支持德语、法语、日语、英语、繁体中文、意大利文、土耳其文等多国语言的winzip19.5生成注册码,可生成个人版、OEM、专业版、专业带备份版等多种类型

    jce_policy-8.zip

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

    php跨域提交及伪造SeSSION

    在Web应用中,浏览器实施同源策略(Same-origin Policy),这意味着一个网页只能访问与其来源URL相同协议、域名和端口的资源。当尝试从一个域名下的页面请求另一个域名的数据时,就会发生跨域问题。PHP中处理跨域的...

    posman-4.7.0-Crx4Chrome.com

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

Global site tag (gtag.js) - Google Analytics