【发布时间】:2014-03-18 10:16:15
【问题描述】:
我已经在这里问过一个关于 IP 认证的问题:TastyPie Authentication from the same server
但是,我需要更多的东西! IP 地址很容易被欺骗。
场景:我的 API (TastyPie) 和客户端应用程序(在 javascript 中)位于同一服务器/站点/域上。我的用户没有登录。我想在我的 javascript 客户端使用我的 API。
问题:如何确保(身份验证)我的 AJAX 请求来自同一服务器?
我正在使用 Tatypie。我需要验证来自客户端的请求是在同一服务器/域等上发出的。我不能使用“登录会话”,因为我的用户没有登录。
我查看了私钥并生成签名,但它们可以在 javascript 中查看,从而使该方法不安全。如果我这样做是为了向服务器请求签名(在某些 python 代码中隐藏私钥),任何人都可以向get_signature 发出与我的 javascript 发出的相同的 http 请求,从而打破这一点。
我还尝试让 Django 视图将签名放入视图中,从而无需进行 get_signature 调用。这是安全的,但意味着我现在每次都必须刷新页面才能获得新的签名。从用户的角度来看,只有第一次调用 API 会起作用,之后他们需要刷新,同样没有意义。
我不敢相信我是唯一有此要求的人。我敢肯定,这是一个常见的情况。请帮助 :) 在 Tastypie 中使用自定义身份验证的示例也将受到欢迎。
谢谢
添加:
【问题讨论】:
-
您的请求需要回复吗?您可以在应用程序级别尝试三向握手。通过欺骗 IP 地址,攻击者应该无法得到任何响应(因为响应将被发送到被欺骗的 IP 地址)
-
@Paulo Bu 这很有趣,我能看到 Tatypie 示例或指南中的任何内容吗?
-
No :( 只是我刚刚得到的一个想法。希望有人能给出答案。
-
另外 - 为什么 csrf 还不够呢?它专门用来防止这种伪造
-
我认为您需要在这里考虑两件事。首先,听起来你有一个公共 API。在这种情况下,请确保以不允许写入的方式锁定 API。第二。您要确保您拥有的脚本可以在同一站点上运行。如果这是一个 Django 站点,为什么不创建一个临时会话,请针对该会话进行验证。这样,当该会话超时时,用户将无法再访问 API。这意味着如果用户通过本地表单进行远程调用,他们将不得不继续在您的站点上启动新会话。等