security - 如何可靠地保护公共(public) JSONP 请求?

标签 security jsonp csrf

我正在尝试寻找是否有一种好的方法来防止嵌入在客户网站上的 javascript 小部件上的 CSRF。

该小部件将使最终用户能够通过 JSONP 向 PHP 服务器发出针对我们客户帐户的请求,该服务器将这些请求代理到我们的(非公共(public))API。

到目前为止,我还没有想出一个万无一失的方法来确保所有请求都只来 self 们客户的网站。我的一些想法:

  • token 在服务器端生成并与每个后续 JSONP 请求一起传回(但不确定如何验证初始请求,因为第一个 token 在 JS 中是可读的,任何人都可以请求“下一个” token )<
  • 检查 Referer header (不可靠,可能被欺骗或浏览器根本不传递)
  • 使用SSL(当然有帮助但不能解决CSRF问题)

这有可能吗?我遇到过Fotomoto's widget这似乎允许我们正在寻找的相同类型的功能,但我不确定他们是如何做到的。

最佳答案

您永远找不到一种解决方案来确保来自随机第三方(用户)的请求实际上是通过访问您客户的网站发起的。如果您的安全依赖于此,那么您必须删除该假设。 (如果您的意思是“确保请求仅来 self 们客户的网站”服务器,那么这是微不足道的:带有客户端证书的 SSL。但我假设您的意思是“来自具有客户端证书的随机用户机器”使用我们客户网站的意图。”)

您应该了解如何防止用户被欺骗 (CSRF)。因此,例如,Referer 可以被欺骗这一事实与这个问题无关。唯一的问题是是否有浏览器存在允许第三方诱骗用户创建欺骗性 Referer 的缺陷。因此,您应该根据需要检查 Referer,但还不够。也就是说,如果Referer错误,就挂断调用者。但 Referer 是正确的事实并不意味着您实际上收到了合法请求。我认为大多数 CSRF 是由于未能检查 Referer 而不是浏览器错误。

Wikipedia article on CSRF对明显的预防技术有一个体面的总结。仅检查 Referer 是重要的第一步。

关于security - 如何可靠地保护公共(public) JSONP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7232985/

相关文章:

java - java 中的安全日志记录

php - 如何防止 PHP 中的 SQL 注入(inject)?

javascript - 从 javascript 代码使用 jsonp

php - 同源策略——JavaScript 调用 PHP

javascript - 单页 Web 应用程序中的 CSRF 保护

security - 使用 SSL CERTIFICATE、PRIVATE KEY 和 SSLCertificateChain CERTIFICATE 在 Tomcat 上启用 SSL

iOS网络问题。 TLS Session缓存漏洞

javascript - jQuery、CORS、JSON(无填充)和身份验证问题

node.js - 如何使用 csurf 保护我的 React 应用程序 api 的安全?

java - 在 Google App Engine 上运行的 GWT 应用程序是否受到 CSRF 保护