Django 什么';为iPhone/Android实现注册RESTAPI的最佳方法是什么?

Django 什么';为iPhone/Android实现注册RESTAPI的最佳方法是什么?,django,api,rest,registration,Django,Api,Rest,Registration,我正在为iPhone和Android编写一个带有RESTAPI的后端应用程序。这是一个内部API 现在,我正在尝试实现一个用户注册API,这样用户就可以从移动应用程序注册 我使用Django编写,Django为web请求提供了跨站点请求伪造。我必须使用django活塞为RESTAPI禁用它 那么,我如何保护我的注册API免受垃圾邮件的攻击呢?掐死验证码?实现注册API的最佳实践是什么?陷阱是什么 提出的一个建议是在移动应用程序上加载一个webview,并提供一个移动web注册表单,以便可以实现C

我正在为iPhone和Android编写一个带有RESTAPI的后端应用程序。这是一个内部API

现在,我正在尝试实现一个用户注册API,这样用户就可以从移动应用程序注册

我使用Django编写,Django为web请求提供了跨站点请求伪造。我必须使用django活塞为RESTAPI禁用它

那么,我如何保护我的注册API免受垃圾邮件的攻击呢?掐死验证码?实现注册API的最佳实践是什么?陷阱是什么

提出的一个建议是在移动应用程序上加载一个webview,并提供一个移动web注册表单,以便可以实现CSRF。这是一个解决方案,但不是一个整洁的解决方案,因为我必须为每个移动设备创建设计页面,或者创建一个可能不适合所有设备的通用页面

非常感谢你的帮助

干杯,
Mickey

没有理由担心RESTAPI的CSRF,请在解释原因的文档中查看这一点

防止垃圾邮件的最佳方法是从已验证的来源收集用户数据,如OpenID提供商、Facebook等。如果您想手动执行此操作,则最简单的方法是获取并扩展其中一个后端。您可以使用提供的简单后端并使用带有captcha字段的自定义表单。这应该足以淘汰自动注册。应该足够简单,让它连接起来

编辑:

你是对的,我只是重新阅读了这个问题,并注意到我完全忽视了一个事实,即你已经提到你正在针对远程Android/iPhone用户开发RESTAPI。因此,您的API是公开的,并接受并非来自您的域或浏览器客户端的请求


在您的情况下,我不会重新发明轮子,您应该实现,因为它完全适用于您的需求:知道您正在与实际用户交换信息,而不必担心请求来自何处。

我同意使用OpenID提供程序是实现这一点的一个很好的方法。你应该研究一下或类似的项目。另外一个好处是,您不需要在数据库中保存密码凭据。要管理的数据越少,释放的数据越少

如果您确实需要一个经典的基于用户名/密码的方案和附带的注册(可能与基于OpenID的东西一样),我会选择活塞提供的节流功能。就我个人而言,我使用CAPTCHA只是作为最后的手段,通过REST接口这样做可能很烦人。在注册阶段可以继续之前,您是否请求验证码?您如何注意到该用户已完成验证码(会话+cookies…)?如果不使用webview(这将使整个REST方法过时),就不能使用reCAPTCHA或类似的服务


我会使用WebView重新访问。如果你保持界面干净和简单,它就不会与任何智能手机平台上的任何约定发生冲突。

kRON:我认为CSRF只适用于AJAX,对吗?对于RESTAPI,我们必须专门使用csrf_emption()。至少,当我尝试使用django-活塞提供的RESTAPI发布时,我发现了这一点。问题是关于注册一个新用户。。。因此无法保护注册表终结点。。。这就是为什么他担心它可能被滥用只是好奇,为什么不能在REST API级别上使用captcha?这当然是可能的,但您必须通过REST获取captcha图像,将其显示给用户,然后在下一次调用中返回答案。我发现它不是API的理想选择,因为您需要一个会话。我不喜欢在API调用之间保持状态。也许只有我同意无状态API调用(这是REST的基本原则之一!)。但是,如果您正在滚动自己的capcha,则没有理由不能在capcha图像URI旁边返回“令牌”(例如答案的MD5盐哈希)。然后让您的移动应用程序通过API进行验证,方法是将用户的答案与他们发出的原始哈希一起发送。@Jamie Chapman您的方法是正确的,但验证码id不应是解决方案的哈希(然后解决验证码将是解决哈希,而不是处理图像)。我不是说这不安全,但我更喜欢使用微时间戳和随机整数的串联(microstamp@randint)为每个创建的captcha生成一个唯一的资源id或“令牌”(这种方法还允许我轻松地消除过时的captcha)。