gpt4 book ai didi

php - 验证基础

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:54 24 4
gpt4 key购买 nike

在web应用中,当然很多情况下我们会支持CRUD(Create, Retriever, Update, Delete)

基本程序员会做类似下面的事情(没有验证):

delete?room_id=12
update?room_id=13

显示的 room_id 仅适用于属于用户/客户的房间。第一次身份验证仅使用用户和密码。嗯,这是一个标准。

但我认为我们不应该信任用户。坏用户可能会猜到不属于他的 room_id。像 delete?room_id=199

我问我的程序员 friend ,他们甚至从来没有想过这个问题。

因此,为了防止这种情况发生,我有一个基本的解决方案,即始终为任何相关对象传递 user_id。在任何操作之前这样的查询是属于用户的 room_id。如果这是唯一的解决方案,那么我必须修改我已经编写的所有查询。

问题是,对于这个基本问题,有什么好的或更好的解决方案吗?

谢谢

最佳答案

您的方法很好。你的程序员 friend 没有考虑过,我真的不感到惊讶;不幸的是,安全似乎是大多数程序员最不关心的事情。

在一个好的系统中,您将对几乎每个执行的操作执行授权检查,以查看该特定用户是否有权执行该操作。在整个应用程序中构建此检查通常是一种很好的做法,即使对于您通常不关心它们是否获得授权的事情也是如此:有一天您可能会。

在您的场景中,该操作可能是检索房间、更新房间甚至删除房间。

为了帮助解决问题,我有一些建议:

  1. 如果可能,让 room_id 不可猜测。假设您已经使用 int 作为主键,最简单的方法是在客户端浏览器和您的应用程序之间传递时对其进行加密/解密。

  2. 确保在浏览器端您没有传递用户 ID,而是从 session 中或通过其他机制提取用户 ID。关键是您不想信任用户将 ID 传递给您。

  3. 任何不是 GET 的操作,都使用 HTTP POST 来执行。换句话说,您根本不应将 ID 放入查询字符串中,而应将其作为发布数据。

关于php - 验证基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14284928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com