CORS 问题很简单 - 您是否希望任何人都能够远程 AJAX 您域中的内容?如果您的表单容易出现 CSRF,这可能会非常危险。这是一个直接从我脑海中摘取的例子。
设置:
- 一家银行,其网上银行服务器的 CORS 标头设置为接受所有(ACAO:*)(称为 A)
- 登录的合法客户(称他们为 B)
- 一个恰好能够让客户端运行任何东西的黑客(称它为 E)
A<->B 对话被认为是合法的。但是,如果黑客可以设法使标记 (B) 加载一个带有一些 JS 的站点,这些 JS 可以触发 AJAX 请求(很容易通过大型站点上的永久 XSS 缺陷),他/她可以让 B 向 A 发送请求通过 JSON,这将被允许并视为正常请求!
你可以用这个做很多可怕的事情。假设银行有一个表单,输入如下:
POST:
* targetAccountID -> the account that will receive money
* money -> the amount to be transferred
如果标记已登录,我可以注入:
$.ajax({ url: "http://A/money.transfer.php"; data { targetAccountID: 123; money: 9999; }; });
突然间,任何访问该站点并登录到 A 的人都会看到他们的帐户耗尽了 9999 个单位。
这就是为什么 CORS 与少量盐一起服用的原因 - 在实践中,打开的次数不要超过您需要打开的次数。打开你的 API,就是这样。
一个很酷的旁注,CORS 不适用于 IE9 之前的任何东西。所以你需要构建一个后备,可能是 iframe 或 JSONP。
不久前,我写了关于这个主题的文章:http ://www.sebrenauld.co.uk/en/index/view/access-json-apis-remotely-using-javascript ,其形式比维基百科更快乐,由方法。这是一个我非常珍视的话题,因为我不得不多次与 API 开发作斗争。