用于rails控制器中create方法的sql注入预防
如comment_controller.rb中所示:
def create @comment = Comment.new(params[:comment]) @comment.save end
我假设这是SQL注入 – 不安全。 但这样做的正确方法是什么?..网上的所有例子都涉及到发现。
该代码不受SQL注入攻击。 转义是由ActiveRecord完成的,所以每当你调用模型的find
, create
, new
/ save
或任何其他进行数据库交互的方法时,你都可以。 唯一的例外是如果您使用原始SQL作为其中一个选项,例如:
Comment.find(:all, :conditions => "user_id = #{params[:user_id]}")
首选forms是:
Comment.find(:all, :conditions => {:user_id => params[:user_id]})
这将自动防止SQL注入。
请注意,您的代码示例可以安全地从SQL注入中解释,正如Alex所解释的那样,但是从大规模分配漏洞利用它并不安全。