HTTP POST Vunerable要改变吗?

时间:2011-05-06 17:02:28

标签: security http-post

我想知道是否有人知道以下情况是否会发生。

假设我已动态生成一个表单,其中包含特定于该客户的产品的复选框。如果客户选中了复选框,则在发布表单时将删除产品。复选框以productID命名。

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

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

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

我之前从未考虑过这个问题,并且想知道默认情况下有多少人真正这样做了,或者那里有一百万个网站可用吗?

由于

3 个答案:

答案 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. 每个用户或会话间接使用   对象引用。这可以防止   攻击者直接瞄准   未经授权的资例如,   而不是使用资源   数据库密钥,下拉列表   授权的六种资源   当前用户可以使用数字1   到6表示哪个值   用户选择。该应用程序有   映射每用户间接   参考回到实际   服务器上的数据库密钥。 OWASP的   ESAPI包括顺序和   随机访问参考地图   开发人员可以用来消除   直接对象引用。

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

  4.   

答案 2 :(得分:0)

为什么不简单地根据您提供的值验证您获得的值?示例:您已为项目1,2和3,9提供了复选框。用户发布了1,2,3,4,5,6。您可以找到列表的交集并删除它(在这种情况下为1,2) ,两个列表中都有3个)。