我正在为iPhone和Android编写一个带有REST API的后端应用程序。这是一个内部API。
此时,我正在尝试实现用户注册API,以便用户可以从移动应用程序注册。
我正在使用Django和Django编写,他们为Web请求提供了Cross Site Request Forgery。我必须使用django-piston为REST API禁用它。
那么如何保护我的注册API免受垃圾邮件的侵害?油门?验证码?实施注册API的最佳做法是什么?什么是陷阱?
提出的一个建议是在移动应用上加载webview,并拥有一个移动网络注册表单,以便实施CSRF。这是一个解决方案,但不是一个整洁的解决方案,因为我必须为每个移动设备创建设计页面,或者可能不适合所有设备的通用设计页面。
很多帮助表示赞赏。
干杯, 米奇
答案 0 :(得分:1)
我同意使用OpenID提供商是实现这一目标的好方法。你应该研究http://pypi.python.org/pypi/django-social-auth或类似的项目。另一个好处是您无需在数据库中保存密码凭据。需要管理的数据越少,数据就越少。
如果你肯定需要一个经典的基于用户名/密码的方案和随附的注册(可能与基于OpenID的东西一样,如SO本身),我会选择活塞提供的限制。就个人而言,我只使用验证码作为最后的手段,并通过REST接口这样做可能非常烦人。在注册阶段可以继续之前,您是否要求验证码?您如何注意到该用户已完成验证码(会话+ cookies,...)?如果不使用webview,就不能使用reCAPTCHA或类似服务(这会使整个REST方法过时的IMO)。
我会重新使用WebView。如果你保持你的界面干净简洁,它不应该在任何智能手机平台上使用任何约定。
答案 1 :(得分:0)
没有理由担心REST API的CSRF,请在解释原因的文档中查看section。
防止垃圾邮件的最佳方法是从经过验证的来源收集用户数据,例如OpenID提供商,Facebook等。如果您想手动执行此操作,那么最简单的方法是执行{{3}并扩展其中一个后端。您可以使用提供的简单后端并使用带有验证码字段的自定义表单。这应该足以清除自动注册。应该足够简单,以便与django-registration联系起来。
修改强>
你是对的,我只是重新阅读了这个问题并注意到我完全无视你已经提到过你正在为远程Android / iPhone用户开发REST API的事实。因此,您的API已公开曝光,并接受非源自您的域或浏览器客户端的请求。
我不会在你的情况下重新发明轮子,你应该实现piston,因为它完全适用于你的要求:知道你正在与实际用户交换信息,而不必担心请求来自何处从