ModelName.new是否可以防止sql注入?
示例:
@user = User.new(params[:user])
@user.save
我已阅读rails security doc并且没有看到任何关于通过Model.new进行插入的内容。
谢谢!
答案 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
寻求解决方案