嵌套属性攻击

时间:2015-11-20 15:03:46

标签: ruby-on-rails ruby ruby-on-rails-4 nested-attributes

我创建了一个像ebay这样的网站,用户可以在其上销售他们的产品。它有如下模型:

  1. User有很多Product
  2. Product有很多Product_packing_typeProduct_packing_type用于描述客户可以购买的包装类型。例如,顾客可以购买1升牛奶包装或3升牛奶包装。
  3. Product包含namedescription等列。
  4. 我使用嵌套属性来编辑产品;换句话说,用户可以同时修改ProductProduct_packing_type

    当用户更新其产品时,服务器会通过产品中的user_id检查产品是否属于用户。但服务器不会检查product_packing_type_id是否属于产品。

    某些不良用户是否可能使用属于他自己的product_id但是不属于该产品的嵌套属性product_packing_type_id来修改其他产品的包装?

    update功能:

    @product.update(product_params)  
    
    def product_params
      params.require(:product).permit(:name, :description,   product_packing_types_attributes:[:id, :quantity, :size] )
    end
    

1 个答案:

答案 0 :(得分:0)

来自accepts_nested_attributes_for文件:

  

如果哈希包含与已关联记录匹配的id密钥,则将修改匹配记录。

在您的代码中,product_params已允许product_packing_type的id属性,因此它将更新product_packing_type内容。

顺便说一句,如果您不允许嵌套的id属性,它将在更新产品时始终创建一个新的product_packing_type对象。