首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >API平台-数据处理前的授权(403) (404)

API平台-数据处理前的授权(403) (404)
EN

Stack Overflow用户
提问于 2022-05-27 15:42:14
回答 1查看 151关注 0票数 -2

在未经授权的端点上执行GET项操作时:

当数据库中不存在资源id时,为什么API平台会抛出404异常?

在2019年,人们对此进行了一场辩论,他们似乎做得很好,在反序列化之前做了安全工作,但实际上不是我喜欢的方式,那就是在询问数据库之前阻止对资源的访问。

它的性能和安全泄漏,因为您调用数据库时,不需要,并公开信息,无论资源是否在数据库内!但是即使这样,假设开发人员不关心泄漏,在处理其他数据流场景之前给其他人处理安全问题的机会是很好的。

当最终用户没有权限时,不需要知道资源是不存在的。同时,API平台允许在请求不存在的资源或表中的行时,当访问被拒绝(403)时,可以看到404错误(请随意调用它)。是一样的)。

如何防止访问(403)不响应404代码而访问不存在的资源?

当资源存在时,API平台中的PS: 403按预期工作。

EN

回答 1

Stack Overflow用户

发布于 2022-05-28 11:31:44

这一问题已得到多次答复。

当数据库中不存在资源id时,为什么API平台会抛出404异常?

API-Platform允许开发人员使用编写安全规则,如下所示:

代码语言:javascript
复制
@ApiResource(
  ...
  security = object.owner == user
)

object是当前HTTP请求的目标实例。因此,在执行GET请求时,API-Platform 需要read,然后在进行比较之前对object进行deserialize。也许您的特定用例不需要它,但是对于大多数其他API来说是这样的。

这是表演..。漏水

在您的用例中,它确实是一个无用的操作。

..。安全漏洞..。公开该资源是否在数据库内的信息!

由于API-Platform的很大一部分安全性可能依赖于学说延伸,当当前用户不允许查看目标资源时,API-Platform可能返回 HTTP响应(或GET collection操作上的筛选集合)。因此,404并不意味着目标对象不存在,它意味着当前用户不存在目标对象,这增加了不透明性,因为攻击者永远不知道资源是否不存在,也不允许他看到它。绝对没有安全漏洞。

如何防止访问(403)不响应404代码而访问不存在的资源?

您可以实现一个EventSubscriberInterface来在ReadListener (即BEFORE_READ )之前执行您的安全规则。也许access_control文件中的security.yaml规则就足够了。您根本没有指定用例,所以我不知道。

总之,这种对框架实现的抱怨应该直接报告给API-Platform的github,而不是在这里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72407905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档