rails是否可以安全地从sql注入?

时间:2010-07-07 07:01:45

标签: sql ruby-on-rails

ModelName.new是否可以防止sql注入?

示例:

@user = User.new(params[:user])

@user.save

我已阅读rails security doc并且没有看到任何关于通过Model.new进行插入的内容。

谢谢!

2 个答案:

答案 0 :(得分:2)

Model.new与SQL注入无关,因为它不是写入数据库的方法。
它是Model.save实际写入数据库并负责SQL注入。

答案 1 :(得分:0)

yes它可以防止sql注入并且是安全的,因为params [:user]是HASH

你可以用下面的例子来检查它我猜你在params [:user] [:name]

中得到一些无效的值
  @user= User.new(params[:user])

  @user.save

  @user= User.new()
  @user.name=params[:user][:name]  #your application may crash here or this is not sql injection safe
  @user.save

为避免这种情况,您可以使用哈希

  @user= User.new({:name=>params[:user][:name]})
  @user.save

阅读this后,我既没有意识到,也没有。 .save从sql注入是安全的

Edited 

质量分配功能可能会成为一个问题,因为它允许攻击者通过操纵传递给模型的new()方法的哈希来设置任何模型的属性:

请阅读6 Mass Assignment以了解问题,并6.1 Countermeasures寻求解决方案