在未经授权的端点上执行GET项操作时:
当数据库中不存在资源id时,为什么API平台会抛出404异常?
在2019年,人们对此进行了一场辩论,他们似乎做得很好,在反序列化之前做了安全工作,但实际上不是我喜欢的方式,那就是在询问数据库之前阻止对资源的访问。
它的性能和安全泄漏,因为您调用数据库时,不需要,并公开信息,无论资源是否在数据库内!但是即使这样,假设开发人员不关心泄漏,在处理其他数据流场景之前给其他人处理安全问题的机会是很好的。
当最终用户没有权限时,不需要知道资源是不存在的。同时,API平台允许在请求不存在的资源或表中的行时,当访问被拒绝(403)时,可以看到404错误(请随意调用它)。是一样的)。
如何防止访问(403)不响应404代码而访问不存在的资源?
当资源存在时,API平台中的PS: 403按预期工作。
发布于 2022-05-28 11:31:44
这一问题已得到多次答复。
当数据库中不存在资源id时,为什么API平台会抛出404异常?
API-Platform允许开发人员使用编写安全规则,如下所示:
@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,而不是在这里。
https://stackoverflow.com/questions/72407905
复制相似问题