Skip to main content
 首页 » 编程设计

jsonp之为什么跨域 JSONP 安全,而跨域 JSON 不安全

2024年11月01日10lyj

我在连接最近了解 JSONP 的一些点时遇到了麻烦。这是我的理解:

  • 由于同源策略,禁止任何内容(包括 JSON)的跨域 XmlHttpRequests。这可以防止 XSRF。
  • 您可以拥有一个带有返回 JSONP 的 src 的脚本标记 - 一些 JSON 填充在对 Javascript 函数的调用中(例如“Foo”)
  • 您可以在返回 JSONP 数据时调用的页面上有一些 'foo' 的实现,并且您可以对传递函数的 JSON 数据进行处理

  • 为什么可以通过 JSONP 接收跨域数据,但如果通过 JSON 接收则不行?

    是否假设 JSON 倾向于允许 XSRF 而 JSONP 不允许?如果是这样,除了 JSONP 是某种事实上的数据格式,永远不会提供支持 XSRF 的数据之外,还有其他原因吗?为什么是 JSONP 而不是 XML 上的一些任意根标记?

    预先感谢您的回答,请在无法弄清楚这一点后让我的大脑重新工作。

    请您参考如下方法:

    我不知道 JSONP 是安全的看法是如何产生的,但请看

    JSON-P is, for that reason, seen by many as an unsafe and hacky approach to cross-domain Ajax, and for good reason. Authors must be diligent to only make such calls to remote web services that they either control or implicitly trust, so as not to subject their users to harm.





    The most critical piece of this proposal is that browser vendors must begin to enforce this rule for script tags that are receiving JSON-P content, and throw errors (or at least stop processing) on any non-conforming JSON-P content.



    两个引述都来自 http://json-p.org/ .

    包含一些有关 JSONP/安全性的有用信息的其他链接:
  • http://beebole.com/en/blog/general/sandbox-your-cross-domain-jsonp-to-improve-mashup-security/
  • Cross Domain Limitations With Ajax - JSON
  • JSONP Implications with true REST

  • 所有这些都说明了两件事——基本上它不被认为是“安全的”,但有一些关于如何使它“更安全”的想法......尽管大多数想法依赖于标准化和特定的检查逻辑来构建到浏览器等中。