2011-05-23 73 views
1

我大部分是Java程序員,實際上我們不必擔心php或甚至rails開發人員不必擔心的很多安全問題。我們必須擔心他們,但我認爲我們的工作實際上更容易。你只是使用Java(已經有很大的獎勵點),並且使用Spring和Spring安全性......而且你基本完成了。 Java和servlet在這方面確實非常好。我認爲我最害怕的最大的安全問題是參數 - 無論是來自控制器的參數(因爲它們動態哈希,與SpringMVC不同)和必須在表單中包含更多隱藏值。Rails安全問題

但是讓我想到了 - 當你創建新模型甚至更新模型時,你必須小心接受。如果你只是盲目地將參數傳遞給你的模型,可能會發生不好的事情。事實上,如果您不太小心,可能會改變用戶角色和內容等內容。

這幾乎就像我想手動編寫setter代碼,以確保它不覆蓋它不應該的東西。即使有框架機制來處理這個問題......我仍然想要測試每個有風險的模型屬性,以確保它不會被創建和更新覆蓋。

儘管Java在生產力方面表現得不好,但它感覺好像處理好了這些東西。

無論如何,我的問題是 - 使用rails處理常見安全缺陷/疑慮/疑難問題的最佳資源/提示/建議是什麼 - 特別適合於習慣於在更有狀態的環境中工作的Java/Spring開發人員。

更好的是,什麼是一個好的清單,每隔一段時間會經歷一次?

最後,你會推薦什麼樣的測試來確保事情是可靠的?

回答

1

我不使用ActiveRecord(我用的DataMapper),但作爲一個規則,我從來沒有大規模任務,我總是明確地通過我想改變的屬性。 Rails 3默認會轉義視圖中的所有內容,除非您明確地將該數據原始輸出到.erb中。

另外,如果你需要下降到使用SQL的東西,它真的讓我感到很奇怪,ActiveRecord不會幫助你。您必須自己逃避輸入,這可能會使您面臨人爲錯誤的風險,從而允許在查詢中執行任意SQL。 DataMapper的底層DataObjects連接支持準備好的語句,事實上,它實際上需要更多的工作來避免使用它們。

Rails 3確實也默認開啓CSRF保護。它也使默認會話cookie僅HTTP,這使得它們更難以通過JavaScript進行竊取。

我其實覺得,除了Rails鼓勵使用大規模任務之外,你在安全性方面已經做得很好。

+1

ActiveRecord 3.1(最終)默認使用預準備語句。 – krohrbaugh 2011-05-23 01:32:06

+0

相關提示:) – d11wtq 2011-05-23 04:28:51

+0

更多信息。你有可能評論製作新紀錄嗎?例如,在Java中,當你創建一個新的對象時,你首先設置它所需的所有關聯......但是對於Ruby,如果它們沒有隱藏參數,那麼當你提交表單時這些關聯將會丟失。那麼當你堅持新的對象時,你會設置它們嗎?另外,如果你可以評論你如何測試長參數列表,那會很搖滾。 – 2011-05-23 12:53:34

3

至少爲了您關心如何在沒有正確檢查的情況下將數據分配給模型對象,請查看attr_accessible聲明;它只允許指定屬性通過批量分配分配:

user = User.new(params[:user]) 
user.approved = params[:user][:approved] 
user.role  = params[:user][:role] 

您可能會發現Ruby on Rails 3rd edition書有用的整個27章。 (我還沒有更新我的4th Edition書呢,不知道從較新的書,建議其章:)。

+1

另一個[ActiveModel :: MassAssignmentSecurity](http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html)方法也可能有幫助。 – krohrbaugh 2011-05-23 01:30:43

+0

我一定會看更多這些。我仍然害怕,當你創建一個新用戶時,設置角色,但不公開這個角色,我的猜測是當你堅持用戶時你重新設置角色。對?在更新時,它可能不像attr_accessible那樣麻煩......但創建似乎是最危險的。 – 2011-05-23 09:25:59