python - 没有身份验证的 Django Rest Framework + 仅 GET

标签 python django rest django-rest-framework

我正在使用 Django Rest Framework 开发网页后端。该网页将是公开的,并且只会从此服务获取信息。因此,我必须部署服务和网页。

由于该网页是公共(public)访问(无需任何类型的登录),我可以避免设置 SSL 内容。但是,默认情况下,DRF 附带可浏览的 API 和登录字段。我知道我可以删除可浏览的 API,但这足够吗?

例如,我的配置是:

(删除 BrowsableAPIRenderer)

   'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer',
                                 'rest_framework.renderers.JSONPRenderer',
                                 'rest_framework_csv.renderers.CSVRenderer', )

和:

CORS_ORIGIN_ALLOW_ALL = True

CORS_ALLOW_METHODS = (
        'GET',
        'HEAD',
        'OPTIONS',
)

我正在使用https://github.com/ottoyiu/django-cors-headers对于 CORS 的东西。

这足以避免不必要的登录尝试吗?有什么具体方法可以禁用此选项吗?

我应该使用什么“DEFAULT_PERMISSION_CLASSES”

致以诚挚的问候并感谢您的帮助!

最佳答案

如果您有登录信息,但没有 SSL,那么您的用户很容易受到许多 Wi-Fi 和以太网上凭据数据包嗅探的影响。此类漏洞可以通过Firesheep轻松利用。火狐插件。由于用户重复使用密码的习惯,您最终可能会损害更关键网站的安全性。这是非常不幸的。如果用户重复使用密码,这并不完全是您的问题,但 SSL 应该成为您用户的基础保护层。

虽然可以使用 Django 模板和 Django Rest Framework (DRF) 作为后端,但您并不限于使用 Django 作为前端。 Consider AngularJS with DRF.无论如何,AngularJS 有一个重要的学习曲线,但您不必限制自己让 Django 提供您的前端。

就删除 DRF BrowsableAPIRenderer 而言,您将从 "security through obscurity" 获得一些保护。 ,但您确实需要通过适当的权限模型锁定您的 API,因为攻击者可以轻松查看前端到后端生成的流量,然后操纵到后端的请求。因此,摆脱 BrowsableAPIRenderer 不会显着降低对手对您界面的发现能力。它只会掩盖前端当前未使用的后端资源,并且还会使您作为前端开发人员的生活更加痛苦。

对于 DEFAULT_PERMISSION_CLASSES,请查看 DRF permissions documentation 。如果您只有两个用户组 - 已登录/身份验证和未登录,则 IsAuthenticatedOrReadOnly是一个很好的起点。如果您开始对不同的用户组进行每个模型的权限 fork ,那么 DjangoModelPermissions是一个值得深入研究的好地方。

关于python - 没有身份验证的 Django Rest Framework + 仅 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30615824/

相关文章:

rest - 结合 REST 请求和回复的约定?

javascript - GET 请求适用于浏览器的 REST 客户端,但不适用于 JS

python - 如何 pip 安装到外部驱动器?

Django Admin'页面未在/admin/中找到

带分页的 Django 过滤器

django - Heroku Django 应用程序返回错误 heroku/router : at=error code=H10 desc ="App crashed"

java - Python - 线程、时序或函数使用?

python - 是否可以激活以 VSCode 路径为前缀的 conda 环境?

python - 如何在 re 中有两个模式

rest - 如何通过将 blob 拆分为 block 并使用 REST 和 PHP 调用 PutBlockList 将其上传到 windows azure