晚上好
我正在使用基于 Django 的服务器创建一个 Android 应用程序,以便将该应用程序与存储信息的中央数据库连接起来。
我读了这篇文章CSRF in Mobile Applications提到应用程序是 CSRF 安全的,所以我不需要保护我的服务器免受这种攻击。
但是如果我想(在未来)扩展这个项目,这样用户就可以同时使用 Android 应用程序和网站来查看和修改他的信息。最好的策略是什么?
我是否应该在浏览器中保持单独的 session ,区分网站用户和 Android 应用程序用户,并仅在网站用户中检查 csrf token ?或者我应该从这个服务器创建一个完全独立的网站,只保护网站的 csrf 吗?或者,我是否应该保持 csrf 保护并在 Android 应用程序中处理它?</p>
谢谢你的帮助,
--- 编辑---
@petkostas 建议我使用 REST 架构。我一直在阅读有关 REST 的内容,据我所知,其中没有保留任何 session 。
因此,如果 REST 是您的建议,我将如何只对某些用户保证某些数据的安全,更改体系结构以便我拥有 session ,或者在每次请求时向用户请求用户名和登录(这似乎就像一个糟糕的选择,因为我必须在每个请求中发送敏感信息(密码))?
最佳答案
我有一个非常相似的用例:android 应用程序、ios 应用程序和网络应用程序 (AngularJS)。
通过使用两种不同身份验证方法的 REST API(使用 Django Rest Framework (DRF))解决了这个问题:
- TokenAuthentication使用 token ,例如 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b。
- SessionAuthentication使用“正常”网络 session 。
设置非常简单:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
# (...)
}
在您的情况下,我会使用 DRF 和 TokenAuthentication,同时知道您可以在需要时添加更多身份验证方法。
关于android - CSRF 安全策略,用于创建具有网站界面的 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25128486/