2010-07-07 53 views
1

構建防止sql注入嗎?rails:構建方法是否防止sql注入

例子:

@post = @user.posts.build(params[:post]) 
@post.save 

沒看到建在軌安全文檔。

謝謝!

+0

重複:http://stackoverflow.com/questions/2144778/sql-injection-prevention-for-create-method-in-rails-controller – dombesz 2010-07-07 09:39:16

+0

這不是一個真正的重複,因爲它不詢問有關使用' build'。此外,可能的重複內容應該可以作爲對問題的評論而不是答案發布。 – mikej 2010-07-07 12:38:17

回答

2

build本身不會向數據庫寫入任何內容,所以SQL注入不適用。當您致電save時,無論對象是通過build創建還是通過其他機制(例如將屬性傳遞給new或使用單個attribute=方法創建),都將使用相同的代碼將對象保存到數據庫。

documentation on build

返回已通過連接表實例化 屬性和鏈接到該對象 集合 類型的新對象,但還沒有 尚未保存。

save方法使用適合於您正在使用(如MySQL的),使得所得insertcreate查詢不容易受到SQL注入數據庫的方法逃避任何報價等在你的屬性值。這同樣適用於update_attributes以及您傳遞給find的任何參數化的:conditions。當你需要小心並且可能需要做一些手動轉義的時候,如果你曾經將字符串作爲查詢傳遞給數據庫連接。

+0

好的,這是有道理的。但上面的代碼示例會過濾掉SQL注入?那部分仍不清楚。謝謝! – djburdick 2010-07-07 17:52:50

+0

@bandhunt我已經更新了答案,以澄清您的問題中的代碼是否正常,並會過濾掉SQL注入嘗試。 – mikej 2010-07-07 18:22:57