2011-08-15 10 views
0

私は3.0.9はRuby on Railsを使用していますが、私は「どのくらい危険なことができ、」データベースのレコードを保存するために、次のステートメントを使用して知りたい:「@ class_object_instance.save!(:validate => false)」メソッドはどれくらい危険ですか?

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

すなわち、何が起こることができますか?たとえば、悪意のあるユーザーがデータベースに何かをハックする(例:許可されていない値を設定する)ことができますか?

注意:私は上記のコードの一部である:validate => falseを参照しており、検証プロセスをスキップすることができます。

+0

さて、検証をスキップすることについての主な懸念事項は、ユーザーがデータベースにガベージデータを入力できるようにすることです。モデル検証をスキップする必要があることが分かった場合は、検証を更新する必要があることを示すサインです。 検証をスキップすると、データベース文字列は引き続きエスケープされるため、「 ';ドロップテーブルユーザー」などの値を入力することはできません。 DBに格納する。また、Rails 3はデフォルトで文字列の中でhtmlをエスケープしますので、特に<%= string_value.html_safe%>と言っていない限り、string_valueはエスケープされたHTMLとともに表示されます。だから、おそらくハッカーからは安全ですが、データの品質は低下します。 –

答えて

1

悪意のあるユーザーが何かをハックすることはできますか?場合によります。 :validate => falseは、クラス@userに属する検証ロジックを無効にします。通常の方法で更新したいパラメータを大量に割り当てた場合でも、SQLインジェクションタイプの攻撃からあなたを守るすべてのエスケープ処理が行われます。 ...アプリケーションの整合性が@userが有効であることに何かにかかっている場合

しかし、あなたは、自分の口座残高を設定し、ユーザーの考えるトラブルであるかもしれないなど有効期限を変更すること、自由のための余分なサブスクリプションを追加する

あなたのアプリケーションが何をしているのか分かりません。関連する検証ロジックを見て、それがなぜそこにあるのか疑問を呈し、障害が発生して何かが壊れた場合にどうなるかを尋ねます。一般的に:validate => falseは良い考えではありません。

関連する問題