【问题标题】:Can authentication via JS be faked? (Using 3rd party Authentication)可以通过 JS 进行身份验证吗? (使用第 3 方身份验证)
【发布时间】:2016-07-21 21:00:30
【问题描述】:
我希望用Twitter Fabric's Digits 覆盖我的 Django 后端的身份验证。 Digits可以让您无需密码登录,它是手机移动身份验证。
诀窍在于,它们为您的前端 (JS) 提供了一个嵌入小部件。此小部件允许您发送请求并返回用户是否经过身份验证。
目前我有两个想法将其与 Django 集成。
- 嵌入脚本,等待响应,然后将响应发送到后端。让后端解析脚本。
- 找出端点并从后端 ping 它们,本质上是用 Python 重写 Fabric 的 Digits JS 函数。
我真的很想做想法 1,但不确定这是否足够安全。请求的响应可以被欺骗吗?选项 1 是否存在漏洞?
【问题讨论】:
标签:
javascript
python
django
authentication
twitter-fabric
【解决方案1】:
选项 #1 还不够,但您确实需要将响应发送到服务器,而您不需要执行 #2。
如果您只是选择第一个选项并且没有对响应进行任何服务器端验证,他们可以轻松地模拟您将转发到后端的响应。请记住(忽略防火墙)用户可以绕过所有客户端验证向您的服务器后端发送他们想要的任何内容。
您需要做的是使用后端的 Digits API 验证您的服务器从前端收到的响应是否有效。 See the documentation:
从您的网络服务器,通过 SSL,您可以使用此响应安全地请求 Digits 用户的用户 ID、电话号码和 oAuth 令牌。使用这种方法,无需配置 OAuth 签名,也无需为 Digits 配置和托管回调 url。
作为额外的安全措施,您需要在您的虚拟主机上:
- 验证 oauth_consumer_key 标头值是否与您的 oauth 消费者密钥匹配,以确保用户正在登录您的网站
- 通过解析 uri 并声明域是 api.twitter.com 或 www.digits.com 来验证 X-Auth-Service-Provider 标头,以确保您调用 Twitter。
- 验证 verify_credentials 调用的响应以确保用户成功登录