我想知道是否有人知道以下情况是否会发生。
假设我已动态生成一个表单,其中包含特定于该客户的产品的复选框。如果客户选中了复选框,则在发布表单时将删除产品。复选框以productID命名。
现在我的处理程序将检查response.form并解析productID,然后根据productID从数据库中删除产品。
可能有人修改帖子以允许删除其他产品ID,可能是通过在POST中添加假复选框名称来删除产品表中的所有内容?
如果是这样,在删除之前很容易检查产品ID是否与经过身份验证的用户相关,并且他们有足够的角色可以删除,或者生成一个随机数并用复选框标记复选框而不是产品ID,但是我现在不这样做。任何指向最佳实践的指针都会很好。
我之前从未考虑过这个问题,并且想知道默认情况下有多少人真正这样做了,或者那里有一百万个网站可用吗?
由于
答案 0 :(得分:2)
绝对可能有人可以使用任何键/值对(包括产品ID值)构建自定义POST请求并将其提交给您的应用程序。从安全角度来看,复选框不在POST 所谓的来自的表单上这一事实无关紧要。
在考虑Web应用程序安全性时,客户端是一个完全不受信任的实体。您必须假设您的JavaScript验证将被绕过,您的SELECT元素可以被更改为包含攻击者想要的任何值,等等。
所以,是的,您应该验证当前用户是否有权删除提交给此处理程序的任何产品ID。
我不一定相信你需要采用nonce-obfuscation路线。这是一个额外的安全层,这很好,但是如果你正在进行适当的授权,我认为没有必要。
我的$ 0.02
答案 1 :(得分:2)
是的,这是一个问题。您所描述的是Open Web Application Security Project(OWASP)定义的“不安全直接对象引用”风险的示例。
至于它有多常见,它目前(2011年)在OWASP的十大最严重的Web应用程序安全风险列表中排名第四。有关如何防止这种情况的详细信息,请参阅OWASP page。
如何防止不安全的直接对象引用?
防止不安全的直接物体 参考文献要求选择 保护每个用户的方法 可访问的对象(例如,对象 number,filename):
每个用户或会话间接使用 对象引用。这可以防止 攻击者直接瞄准 未经授权的资例如, 而不是使用资源 数据库密钥,下拉列表 授权的六种资源 当前用户可以使用数字1 到6表示哪个值 用户选择。该应用程序有 映射每用户间接 参考回到实际 服务器上的数据库密钥。 OWASP的 ESAPI包括顺序和 随机访问参考地图 开发人员可以用来消除 直接对象引用。
- 醇>
检查访问权限。每次使用直接对象引用 不受信任的来源必须包括 访问控制检查以确保 用户已获得所请求的授权 对象
答案 2 :(得分:0)
为什么不简单地根据您提供的值验证您获得的值?示例:您已为项目1,2和3,9提供了复选框。用户发布了1,2,3,4,5,6。您可以找到列表的交集并删除它(在这种情况下为1,2) ,两个列表中都有3个)。