通过 JS 进行身份验证可以伪造吗? (使用第三方认证)

Can authentication via JS be faked? (Using 3rd party Authentication)

我希望用 Twitter Fabric's Digits 覆盖我的 Django 后端的身份验证。 Digits 允许您无需密码登录,它是手机移动身份验证。

诀窍是,他们为您的前端 (JS) 提供了一个嵌入小部件。此小部件允许您发送请求和 returns 无论用户是否通过身份验证。

目前我有两个将其与 Django 集成的想法。

  1. 嵌入脚本,等待响应,并将响应发送到后端。让后端解析脚本。
  2. 找出端点并从后端 ping 它们,本质上是在 Python.
  3. 中重写 Fabric 的 Digits JS 函数

我真的很想做想法 1,但不确定这是否足够安全。请求的响应是否可以被欺骗?选项 1 是否存在漏洞?

选项#1 还不够,但您确实需要将响应发送到服务器,而您不需要执行#2。

如果您只是选择了第一个选项并且没有对响应进行任何服务器端验证,他们可以轻松地模拟您将转发到后端的响应。请记住(忽略防火墙)用户可以绕过所有客户端验证将他们想要的任何内容发送到您的服务器后端。

您需要做的是通过使用来自后端的数字 API 来验证您的服务器从前端收到的响应是否有效。 See the documentation:

From your web server, over SSL, you can use this response to securely request the userID, phone number, and oAuth tokens of the Digits user. With this approach, there is no need to configure OAuth signing, or configure and host a callback url for Digits.

As additional security measures, you will want to on your webhost:

  • Validate the oauth_consumer_key header value matches your oauth consumer key, to ensure the user is logging into your site
  • Verify the X-Auth-Service-Provider header, by parsing the uri and asserting the domain is api.twitter.com or www.digits.com, to ensure you call Twitter.
  • Validate the response from the verify_credentials call to ensure the user is successfully logged in