sql - ruby on rails update_attributes 是否可以防止 sql 注入(inject)?

标签 sql ruby-on-rails activerecord

update_attributes 是否可以防止 sql 注入(inject)?

例子:

 if @user.update_attributes(params[:user])
     # updated
 end 

我知道 find() 和 {} 和 [] 在 find :conditions 中执行,但没有看到有关此方法的任何信息。

最佳答案

是的,它确实。在内部,它只是简单地循环所有属性,设置它们的值然后调用保存!

def update_attributes(attributes)
  with_transaction_returning_status do
    self.attributes = attributes
    save
  end
end

def attributes=(new_attributes, guard_protected_attributes = true)
  ...
  attributes.each do |k, v|
    if k.include?("(")
      multi_parameter_attributes << [ k, v ]
    elsif respond_to?("#{k}=")
      send("#{k}=", v)
    else
      raise(UnknownAttributeError, "unknown attribute: #{k}")
    end
  end
end

换句话说,它的作用是
m.update_attributes(:attr1 => "foo", :attr2 => "bar")

m.attr1 = "foo"
m.attr2 = "bar"
m.save

关于sql - ruby on rails update_attributes 是否可以防止 sql 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192524/

相关文章:

php - 通过 PHP 从 SQL DB 获取 100 个最新的数据库条目

ruby-on-rails - Spree 内部化 default_locale 保持 :en

ruby-on-rails - 如何获取 "merge" "duplicate"事件记录对象?

php - Yii2 用 ActiveRecord 查找返回简单属性数组

mysql - 获取所有没有关联数据的行

sql - 虚拟 where 子句对性能的影响

mysql - 连接Mysql中的字段

mysql - 如何组合这些 SQL 查询来给出一个结果?

ruby-on-rails - 在 CMS 页面中呈现动态内容

javascript - Rails 6 与 js-cookie 库 : cookie is set but not persistent