2010-07-07 56 views

回答

2

Model.new與SQL注入無關,因爲它不是寫入數據庫的方法。
這是實際寫入數據庫並負責SQL注入的Model.save

+0

你的意思是,如果我單獨賦值,然後使用'Model.save',它將處理SQL注入。如果是的話,你錯了' – Salil 2010-07-07 09:39:42

+0

看看這個http://stackoverflow.com/questions/2144778/sql-injection-prevention-for-create-method-in-rails-controller。和http://guides.rubyonrails.org/security.html#mass-assignment。 – 2010-07-07 10:45:00

+0

@NM - 所以任何.save總是安全的注射?既然你不能用.save做原始的SQL?另外,大規模任務與此無關。 – djburdick 2010-07-07 17:57:34

0

yes它防止SQL注入,是安全的,PARAMS [:用戶]是HASH

你可以follwing例如檢查一下我assumr你params中得到一些無效值[:用戶] [:名字]

@user= User.new(params[:user]) 

    @user.save 

@user= User.new() 
    @user.name=params[:user][:name] #your application may crash here or this is not sql injection safe 
    @user.save 

爲了避免這種情況,你可以使用哈希

@user= User.new({:name=>params[:user][:name]}) 
    @user.save 

閱讀this後,我來conlcusion既不。新& .save從SQL注入安全

Edited 

的質量分配功能可能會成爲一個問題,因爲它允許攻擊者設置任何型號的通過操縱傳遞到一個模型的new()方法的散列屬性:

請閱讀6 Mass Assignment爲它的問題,併爲6.1 Countermeasures溶液

+0

你能解釋爲什麼前者比後者更安全嗎?謝謝。 – 2010-07-07 11:25:57

+0

謝謝!有沒有任何軌道文件解釋這一點?我知道安全文檔討論查找,但不是關於創建/保存。 – djburdick 2010-07-07 18:01:04

+0

查看http://guides.rubyonrails.org/security.html#mass-assignment。你所說的完全與Rails安全性文檔所說的完全相反。 – 2010-07-07 20:41:54