如何为丢失的资源建模权限?

Posted

技术标签:

【中文标题】如何为丢失的资源建模权限?【英文标题】:How to model permissions for missing resources? 【发布时间】:2014-10-27 11:45:13 【问题描述】:

我有以下 REST 资源:

/companies 返回公司列表 /companies/id 返回公司状态 /companies/id/departments 返回公司所有部门 /employee/id/departments 返回员工所在的部门 /departments/id 返回部门状态

需要注意的是,一个部门知道其关联公司和员工,但其 URI 不包含此信息。如果该部门不存在,则无法知道它曾经与哪个公司/员工相关联(或者该资源是否曾经存在过)。为了争论起见,您应该假设部门 URI 方案不太可能改变(说来话长)。

/companies 资源具有关联的query 权限令牌。当客户引用不存在的公司/companies/id 时,我会检查他们是否有权访问query。如果他们这样做,我返回HTTP 404 ("Not Found"),否则我返回HTTP 403 ("Forbidden")

到目前为止一切顺利。当客户端引用不存在的/departments/id 资源时,就会出现问题。由于部门不存在,我无法弄清楚它与哪个公司和query 权限令牌相关联。

看来我们又回到了经典usability/security tradeoff:

通过假设每个人都有权知道资源是否存在来提高可用性(返回明确的错误消息,指出出现了什么问题),或者 如果缺少资源或权限被拒绝,则通过返回模糊的错误代码来提高安全性(返回模糊的错误消息以隐藏资源是否存在或是否定义了权限)。

还有其他方法吗?

【问题讨论】:

【参考方案1】:

我最终放弃了query 权限。任何人只要知道它的地址就可以查找任何资源。意思是,我不会试图阻止未经授权的用户发现资源是否存在。

【讨论】:

以上是关于如何为丢失的资源建模权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何为vertx设置一个持久的计时器,如果服务器重新启动,它不会丢失?

Firestore C#:权限丢失或不足

proguard.cfg 文件丢失

mysql数据库root权限丢失(密码丢失)

如何为 webapp 构建 phonegap 应用程序?

如何为 AWS API Gateway Custom Authorizer 提供 Lambda 权限?