2011-02-27 20 views

回答

5

ActiveRecord的发现总是会使用.to_i防止所有的SQL注入魔力。

的Rails也会自动逃逸的东西,在查询这样的:

Comment.where(["id = ?", params[:id]]) 

Comment.where("id = #{params[:id]}") 
+0

所以我应该让我所有的问题像你一样? Comment.where([“id =?”,params [:id]]) 或者我现在在q好吗? – AnApprentice 2011-02-28 01:34:08

+0

@AnApprentice:你使用的'find'没问题。但是(这是一个很大但是),当你使用字符串插值('“id =”“)构建小块SQL时,总是使用占位符格式('[”id =?“,params [:id] #{params [:id]}“')让你开放SQL注入,除非你已经仔细验证了所有的东西,甚至你仍然应该使用占位符来验证你的代码。 – 2011-02-28 02:47:59

2

是。如果你担心sql注入,它会采取你的参数和消毒。但更好的方法是使用像http://a.com/31343231这样的网址。制作起来相当简单,但看起来更好

+2

它是否也会清理动态查找助手,如'find_by_name(params [:id])'还是更好地执行where语句? – iwasrobbed 2011-04-18 20:53:03

+0

是的,它也会消毒它 – fl00r 2011-04-18 20:55:25

+0

@ fl00r在url中查询数据库是否安全?使用查询字符串 – blackHawk 2016-12-11 07:47:20