2011-05-06 95 views
2

我想知道是否有人知道下面的情况是否会发生。HTTP POST可以改变吗?

假设我已经动态生成了一个具有特定于该客户的产品复选框的表单。如果客户检查这些箱子,则在发布表格时产品将被删除。复选框以productID命名。

现在我的处理程序将检查response.form并解析productID,然后根据productID从数据库中删除产品。

有人可能会通过向POST添加假复选框名称来修改帖子以允许其他productIDs被删除,可能是产品表中的所有内容?

如果是这样,在删除productID与已验证的用户相关之前很容易检查,并且他们有足够的角色来删除或生成一个随机数,并用复选框标记复选框而不是其产品ID,不过,我现在没有这样做。任何指向这方面最佳实践的指针都会很好。

我以前从来没有考虑过这个问题,不知道有多少人实际上默认这样做,还是有一百万个网站可以使用?

谢谢

回答

0

为什么不简单地验证您提供的值与您提供的值?例如:您已经提供了项目1,2和3,9的复选框。用户的帖子为1,2,3,4,5,6。您可以找到列表的交集并删除它们(在本例中为1,2 ,3个都在列表中)。

+0

谢谢,我会看这也可能是最便宜的方式,而不是要回数据库来检查POST。 – user742170 2011-05-06 17:24:14

2

它是绝对可能有人可以用任何键/值对(包括产品ID值)构建自定义POST请求并将其提交给您的应用程序。事实上,复选框不在POST的假设来自的形式与安全角度无关。

在考虑Web应用程序安全性时,客户端是完全不受信任的实体。您必须假设您的JavaScript验证将被绕过,您的SELECT元素可以被更改为包含攻击者想要的任何值,等等。

所以是的,你应该验证当前用户是否有权删除提交给该处理程序的任何产品ID。

我不一定相信你需要走nonce-obfuscation路线。这是一个额外的安全层,这是很好的,但如果你正在执行适当的授权,我不认为这是必要的。

我的$ 0.02

+0

感谢您的回复,很高兴知道POST不安全,这将意味着我更加严格。我一定会对答复进行更多的检查,以确保我从用户那里得到的回报。 – user742170 2011-05-06 17:23:24

2

是的,这是一个问题。您所描述的是由Open Web Application Security Project(OWASP)定义的“不安全的直接对象引用”风险的示例。

至于它有多常见,它目前(2011)在OWASP排名前十的最严重的Web应用程序安全风险中名列第四。有关如何防止这种情况的详细信息,请参阅OWASP page

如何防止不安全的直接对象引用?

防止不安全的直接对象 引用需要选择 方法,用于保护每一个用户可访问的 对象(例如,对象 数目,文件名):每用户或会话间接 对象引用

  1. 使用。这可以防止 攻击者直接将未经授权的资源定位到 。例如, 而不是使用资源的 数据库密钥, 授权给当前用户的六个资源的下拉列表可以使用数字到6来指示用户选择的哪个值 。该应用程序有 可将每个用户间接参照 参考映射回服务器上实际的 数据库项。 OWASP的 ESAPI包括顺序和 随机访问参考地图, 开发人员可以用来消除 直接对象引用。

  2. 检查访问权限。每个使用来自 不受信任来源的直接对象引用都必须包含一个 访问控制检查,以确保 用户已获得所请求的 对象的授权。

相关问题