Javascript 外行术语中的同一原产地政策

Javascript 外行术语中的同一原产地政策,javascript,html,same-origin-policy,Javascript,Html,Same Origin Policy,有人能帮我更好地理解同一原产地政策吗。我看过好几个网站描述它,但我想找一个更简单的解释,你会如何向一个孩子描述它 这似乎是我找到的最好的工作。有人能扩展吗?有人能解释为什么会存在此策略吗?基本上这意味着-只有来自同一域的脚本才能访问彼此的对象和属性而不受限制(因此,如果您有一个定义了命名函数的.js文件,您可以从同一域上托管的任何其他文件调用它) 因此,如果您正在为来自不同域的脚本提供服务,请应用限制 此策略之所以存在,是因为很容易将链接插入到另一个域上的javascript文件(例如,某些ja

有人能帮我更好地理解同一原产地政策吗。我看过好几个网站描述它,但我想找一个更简单的解释,你会如何向一个孩子描述它


这似乎是我找到的最好的工作。有人能扩展吗?有人能解释为什么会存在此策略吗?

基本上这意味着-只有来自同一域的脚本才能访问彼此的对象和属性而不受限制(因此,如果您有一个定义了命名函数的
.js
文件,您可以从同一域上托管的任何其他文件调用它)

因此,如果您正在为来自不同域的脚本提供服务,请应用限制


此策略之所以存在,是因为很容易将链接插入到另一个域上的javascript文件(例如,某些javascript代码将链接插入到此类文件)。这是一种安全风险-您实际上只希望执行来自您所在站点的代码,而不希望执行任何存在的代码。

需要使用同源策略来防止。想象一下这个场景:

  • 银行经理Joe Fatcat在其银行的管理后端拥有一个帐户。该帐户允许他访问任何在TBtF银行开户的人的机密帐户信息。他甚至可以重置某人的密码、转账、更改帐户所有权等
  • 现在,TBtF银行解雇了IT人员杰克。现在他成了被挖苦的前IT人员杰克,他想报复他的前雇主。杰克无法访问银行的管理后台,但他知道乔可以访问
  • 因此,杰克向他的老板发送了一封电子邮件,其中包含一个链接,指向杰克创建的页面。页面上有一些JavaScript,如:

  • 第二天,Joe来到他的办公室,像往常一样登录到他的管理帐户,并在后台打开选项卡
  • 乔看到一封电子邮件,里面有娜塔莉·波特曼的照片链接,照片上布满了热沙砾。所以他很自然地点击它,打开恶意网页
  • 浏览器在页面上运行JavaScript,并向TBtF银行的管理后端站点发出AJAX POST请求。因为Joe已经登录到该站点并有一个活动会话,所以银行应用程序接受该命令并将数百万美元汇到Jack的离岸银行帐户
  • 杰克本可以同样轻松地使用同样的技术获取数千个账号和PIN码,或者银行经理可以通过他的账户访问的任何其他信息


    幸运的是,同源策略在大多数情况下保护我们免受这些类型的攻击,因为Jack的恶意页面托管在与银行应用程序不同的域中,因此不允许对银行应用程序进行XHR。尽管恶意页面仍可能包含向银行应用程序发出GET请求的图像,但重要的是,具有副作用的操作不能通过GET请求启动,应用程序应检查其收到的请求的Referer标头,并利用反CSRF令牌。

    您尝试过吗?是的,我不愿意承认,但我仍然对此感到困惑。我找不到任何明确的理由来解释为什么这项政策甚至存在于阅读CSRF。这就是为什么。要添加到这里的答案中,实际上可以使用一个特殊的头来绕过这个问题,该头需要同时出现在客户端和服务器端。在这里阅读:+1,这是CSRF的一个好例子。还有,为什么我在读了这篇文章后在谷歌上搜索“娜塔莉·波特曼满身热沙砾”=/这正是我所希望的。非常感谢
    只有来自同一域的脚本才能访问彼此的对象
    。那么,为什么您可以包含来自CDN的jQuery并让它访问页面上的DOM?@Rocket:Correct。重要的是脚本执行的页面的域,而不是JS文件的宿主位置。事实上,在
    CORS
    标准化之前,您是如何发出跨域AJAX请求的,它基本上链接到一个非现场JS文件,作为从另一个域(JSON形式)获取数据的一种方式。
    var xhr = new XMLHttpRequest(),
        data = "from="+victimAccount
               + "&to="+jacksAccount
               + "&amt=a+gazillion+dollars";
    xhr.open("POST", "http://tbtfbank.tld/accounts/wiretransfer.aspx", true);
    xhr.send(data);