2011-08-15 54 views
0

我使用on Rails的3.0.9 Ruby和我想知道「多少可能是危險」使用下面的語句,以保存在數據庫中的記錄:'@ class_object_instance.save!(:validate => false)'方法有多危險?

@user.save!(:validate => false) 

也就是說,會發生什麼?例如,惡意用戶可以在數據庫中篡改某些東西(例如:設置一些不允許的值)?

注意:我指的主要是:validate => false上述代碼的一部分,它可以跳過驗證過程。

+0

那麼,關於跳過驗證的主要問題是,它會讓用戶在您的數據庫中輸入垃圾數據。如果您發現自己需要跳過模型驗證,則表示您需要更新驗證。 如果您跳過驗證,數據庫字符串仍然會被轉義,所以您不能輸入像「'; drop table users」這樣的值。進入數據庫。 Rails 3在默認情況下也會在字符串中轉義html,所以除非您特別說明<%= string_value.html_safe%>,否則string_value將以轉義的HTML顯示。所以你可能會從黑客​​安全,但你的數據質量將受到影響。 –

回答

1

惡意用戶是否可以'剽竊'?那要看。 :validate => false禁用類@user所屬的任何驗證邏輯。如果你以普通的方式批量分配了你想要更新的參數,你仍然會得到所有的轉義,這將保護你免受SQL注入式攻擊。

但是如果應用程序的完整性建立在什麼上@user是有效的,你可能在想故障地設置用戶自己的賬戶餘額,增加額外的訂閱免費,改變到期日等..

我不確定你的應用程序的功能。看看相關的驗證邏輯,詢問爲什麼它在那裏,然後問自己,如果它被禁用並且發生了什麼事情會發生什麼。一般:validate => false不是一個好主意。