在我的控制器動作,我有以下幾點:這是否容易發生SQL注入?
def index
@articles = (params[:mine] == "true") ? current_user.articles : Article.search(params[:search])
@articles = @articles.sort! { |a,b| b.created_at <=> a.created_at }
@articles = Kaminari.paginate_array(@articles).page(params[:page]).per(25)
respond_to do |format|
format.html
format.json { render json: @articles }
end
end
和模型:
我明白,如果你直接在查詢中使用PARAMS SQL注入將是可能的。在這裏,我通過Article.search(params[:search])
直接將params傳遞給where查詢。這是否容易SQL注入?如果是這樣,我怎樣才能讓它更安全?如果我已經正確編寫了控制器代碼,我也有疑問。如果你有重構控制器代碼的建議,請讓我知道,他們將非常感激。非常感謝!
感謝您提供這些細節。我不確定我是否還想進入Arel,但是Squeel確實看起來很吸引人,我一定會檢查一下。按照'你現在的方法很好',你的意思是說注射安全嗎?如果可能的話,你能解釋一下那部分嗎?謝謝! – maru
我知道分頁有問題,但我的問題是我無法對數組執行.page(),因爲第一行返回數組或活動記錄關係。你知道我該如何處理?通過傳遞排序選項,你的意思是我應該將它作爲參數傳遞,並對模型執行排序?謝謝。 – maru
http://guides.rubyonrails.org/security.html#sql-injection,可以解釋一下比我好一些。 – nowk