【发布时间】:2011-04-03 20:15:08
【问题描述】:
像许多开发人员一样,我想让服务器“A”提供的 JavaScript 与服务器“B”上的 Web 服务通信,但被 same origin policy 的当前化身所阻碍。克服这个(我能找到的)最安全的方法是一个服务器脚本,它位于服务器“A”上并充当它和“B”之间的代理。但是如果我想在各种客户环境(RoR、PHP、Python、.NET 等)中部署这个 JavaScript 并且无法为所有这些环境编写代理脚本,我该怎么办?
使用 JSONP,some people say。好吧,Doug Crockford 指出 on his website 和 in interviews 脚本标签 hack(由 JSONP 使用)是绕过同源策略的不安全方法。 “A”提供的脚本无法验证“B”是他们所说的身份,并且它返回的数据不是恶意的或将捕获该页面上的敏感用户数据(例如信用卡号)和传给卑鄙的人。这似乎是一个合理的担忧,但如果我只使用脚本标签 hack 并严格使用 JSON 进行通信怎么办?那安全吗?如果不是,为什么不呢?使用 HTTPS 会更安全吗?示例场景将不胜感激。
附录:需要支持 IE6。第三方浏览器扩展不是一种选择。让我们继续解决脚本标签黑客的优点和风险。
【问题讨论】:
-
what if I just use the script tag hack by itself and communicate strictly in JSON?是什么意思? -
“A”提供的脚本将包含一个语句,该语句将脚本标记附加到客户端 DOM。该脚本标记将包含一个 AJAX 调用,该调用将从不同域的“B”获取纯 JSON 数据。如果“A”提供的脚本将响应解析为 JSON,那么任何 JavaScript 填充(又名 JSONP、恶意或其他)不会导致解析错误吗?
标签: security cross-domain xss jsonp same-origin-policy