用于rails控制器中create方法的sql注入预防

如comment_controller.rb中所示:

def create @comment = Comment.new(params[:comment]) @comment.save end 

我假设这是SQL注入 – 不安全。 但这样做的正确方法是什么?..网上的所有例子都涉及到发现。

该代码不受SQL注入攻击。 转义是由ActiveRecord完成的,所以每当你调用模型的findcreatenew / save或任何其他进行数据库交互的方法时,你都可以。 唯一的例外是如果您使用原始SQL作为其中一个选项,例如:

 Comment.find(:all, :conditions => "user_id = #{params[:user_id]}") 

首选forms是:

 Comment.find(:all, :conditions => {:user_id => params[:user_id]}) 

这将自动防止SQL注入。

请注意,您的代码示例可以安全地从SQL注入中解释,正如Alex所解释的那样,但是从大规模分配漏洞利用它并不安全。