有人可以帮助我更好地理解同源政策。我看过几个描述它的网站,但我正在寻找一个更简单的解释,你会如何向孩子描述它?
这个链接 似乎做了我发现的最好的工作。任何人都可以扩展吗?有人能解释为什么这个政策存在吗?
有人可以帮助我更好地理解同源政策。我看过几个描述它的网站,但我正在寻找一个更简单的解释,你会如何向孩子描述它?
这个链接 似乎做了我发现的最好的工作。任何人都可以扩展吗?有人能解释为什么这个政策存在吗?
需要同源策略来防止CSRF。想象一下这个场景:
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);
杰克本可以很容易地使用相同的技术来收集数千个帐号和密码或银行经理可以通过他的帐户访问乔的任何其他信息。
幸运的是,同源策略在大多数情况下保护我们免受这些类型的攻击,因为 Jack 的恶意页面托管在与银行应用程序不同的域中,因此不允许对银行应用程序进行 XHR。尽管恶意页面仍可能包含向银行应用程序发出 GET 请求的图像,但重要的是不要通过 GET 请求启动具有副作用的操作,并且应用程序检查它们收到的请求的引用标头并利用反CSRF 代币。
基本上这意味着 - 只有来自同一域的脚本才能不受限制地访问彼此的对象和属性(因此,如果您有一个.js
定义了命名函数的文件,您可以从托管在同一域上的任何其他文件中调用它)。
因此,如果您提供来自不同域限制的脚本,请务必应用。
之所以存在此策略,是因为将链接注入到不同域中的 javascript 文件(例如一些注入此类文件的链接的 javascript 代码)太容易了。这是一个安全风险——您真的只想要来自您所在站点的代码来执行,而不仅仅是那里的任何代码。