2011-02-27 25 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