【发布时间】:2015-10-09 00:39:44
【问题描述】:
我正在为移动应用开发 Django Rest Framework 后端。 API 是私有的,只能在内部使用。
可浏览的 API 可以方便地帮助开发人员处理项目,但我想防止任何未设置为项目管理员的人使用可浏览界面。
我意识到可浏览的管理员不会授予用户否则不会拥有的任何权限,但它确实有一些安全灰色区域(例如,对于具有外键关系的模型,HTML 选择器字段会填充所有数据库中可能的相关对象,除非您明确指示不要这样做)。
由于此应用处理敏感的用户数据,我更愿意向公众公开尽可能小的表面积,以减少我自己的潜在错误疏忽的风险。
有什么方法可以为非管理员用户禁用可浏览的 API,而不为所有人禁用它?我已经进行了大量的谷歌搜索并查看了 SO 并没有找到答案。这个问题很接近How to disable admin-style browsable interface of django-rest-framework?,但不一样,因为这些说明会禁用所有人的界面。
【问题讨论】:
-
如何将 html 选择器字段添加到可浏览的 API?它只是文本输入的 html 表单。
-
但是,如果你真的认为你需要执行这个禁用,你很可能必须子类化 BrowsableApiRenderer,找到一个很好的地方来挂钩并检查 request.user 的管理员状态,然后渲染没有。不过,我认为这是一个糟糕的解决方案。 github.com/tomchristie/django-rest-framework/blob/master/…
-
我强烈建议在生产环境中删除可浏览的 API(仅在
DEBUG为True时将其添加为默认渲染器)。另请注意,如果您的下拉列表暴露了太多信息,那么聪明的人(阅读:其他无聊的开发人员)可能也会链接对象并暴露该数据。 -
@MarkGalloway 如果您将序列化器字段设置为 PrimaryKeyRelated 等,可浏览的 API 将抛出一个 HTML 选择下拉列表,其中包含所有可能的外键(例如,如果您有系统中的所有用户“用户”外键字段)。这让我感到惊讶,并让我担心可浏览 API 中的信息泄露。
-
这很酷。我总是声明显式相关的序列化程序,所以我想这就是我从未见过它的原因。
标签: python django security django-rest-framework