Javascript 同一原产地政策是为了什么

Javascript 同一原产地政策是为了什么,javascript,same-origin-policy,Javascript,Same Origin Policy,我不明白为什么我们需要这个规则。如果它是如此重要,为什么我们可以得到这么多的解决办法?比如JSONP、CORS等 是否有任何示例可以说明没有此规则的损坏?如果您查看,您将看到: 通常允许跨源写入。例如链接、重定向和表单提交。某些很少使用的HTTP请求需要飞行前处理 通常允许跨原点嵌入。下面列出了一些例子 通常不允许跨源读取,但读取访问通常会因嵌入而泄漏。例如,您可以读取嵌入式图像的宽度和高度、嵌入式脚本的操作或嵌入式资源的可用性 这里有一个很好的例子: 假设您登录到Facebook并访问另一个浏

我不明白为什么我们需要这个规则。如果它是如此重要,为什么我们可以得到这么多的解决办法?比如JSONP、CORS等

是否有任何示例可以说明没有此规则的损坏?

如果您查看,您将看到:

通常允许跨源写入。例如链接、重定向和表单提交。某些很少使用的HTTP请求需要飞行前处理

通常允许跨原点嵌入。下面列出了一些例子

通常不允许跨源读取,但读取访问通常会因嵌入而泄漏。例如,您可以读取嵌入式图像的宽度和高度、嵌入式脚本的操作或嵌入式资源的可用性

这里有一个很好的例子:

假设您登录到Facebook并访问另一个浏览器选项卡中的恶意网站。如果没有相同的源代码策略,该网站上的JavaScript可以对您的Facebook帐户执行任何允许您执行的操作。例如,阅读私人消息、发布状态更新、在提交表单之前输入密码后分析HTML DOM树


关于您提出的为什么存在CORS、JSONP等问题(即绕过同一来源策略的方法):这允许域指定其他来源访问其API的方式(读取内容等)。例如,CORS允许服务器指定安全域的白名单,从服务器读取。

跨源安全性可防止一个网站从您登录的另一个网站窃取信息

例如,如果我创建了一个网站,我为你经常登录的gmail网站设置了框架,我的网页可以访问gmail框架并在gmail网页中阅读你的所有电子邮件,那么我就可以轻松窃取你的大量信息。将此扩展到您的银行网站、paypal网站等。。。所有,我要做的就是让你来我的恶意网站一次,当你碰巧登录到这些其他易受攻击的网站之一。跨源安全性防止这种类型的跨站点访问,因此不受信任的网站不能在同一浏览器中任意从另一个网页窃取信息

“在浏览器中”访问另一个网站的网页的具体危险是,浏览器中的网页可以访问该网站的所有登录cookie,因此它经常显示一般公众通常无法通过任何公共界面获得的数据,而不具有合法的登录凭据。这就是为什么浏览器中显示的网页必须受到保护的原因


诸如JSONP或CORS之类的“变通方法”都需要宿主站点的合作,因此只有当宿主站点认为它们允许通过这些机制使用的接口是安全和适当的时,才能使用它们。您不能使用常规接口,而作为客户机,只需通过JSONP或CORS使用它,这是行不通的。这两种机制都要求服务器专门启用跨源访问机制。

第二个示例是理解为什么需要它的关键。作为开发人员,我们常常过于专注于自己的网站,以至于我们无法想象另一个开发人员编写另一个网站试图访问我们的页面。