2009-08-18 9 views
0

ユーザー入力を受け取った場合、最初に検証してからデータベースに保存する前にサニタイズすると何か違いはありますか?'before_validate'または 'before_save'のときにユーザー入力をサニタイズする必要がありますか?

また、非正規化入力の検証にリスクがありますか?

(私は主に任意のHTMLタグを取り去る意味 'がサニタイズ' と言うとき)

UPDATE &明確化:

私はデータベースにHTMLタグを入れていないだろう。私はそれを保存する前に入力をサニタイズする - しかし、私のモデルに対して検証した後。バリデーションとサニタイズが別々の理由は、それらが別々のライブラリであるからです。唯一の問題は、 'before_validate'または 'before_save'に 'sanitize'を呼び出す必要があるかどうかです。

答えて

0

なぜHTMLのストリッピング(またはエスケープ)を他の検証と区別していますか?それはすべて同じことではありませんか?

なぜHTMLタグを後で取り除くためにデータベースに入れるのですか?データベースが一時的に間違っているとは限りませんか?

「妥当性検査」と「墨塗り」を区別している理由はわかりません。彼らは同じコインの2つの側面です。 すべてを実行すると、データベースにコミットする前にデータが完璧であることを確認できます。


"唯一の質問は、 'before_validate'または 'before_save'に 'sanitize'を呼び出す必要があるかどうかです。

言葉の区別があまりにも微妙です。あなたは両方をしなければなりません。一般的に、HTMLを試して検証する必要はありません。

したがって、(1)HTMLタグを削除するために「サニタイズ」し、次に(2)残っているものを検証することが賢明です。

他にどのように実行できるかわかりません。

0

データベースに送信する前に、常に検証とサニタイズを行います。そうすることなく、データベースをSQLインジェクション攻撃にさらすことができます。

どのような順序で行うかは、ユーザーエクスペリエンスをどのようにするかによって異なります。あなたが最初に検証する場合は、戻って、ユーザに確認を提供することができます簡単に

必要XKCD漫画(これを行うには、JavaScriptと正規表現を使用することができます):

alt text

+1

関連性が低い。 – conor

1

私が考えることができる唯一のリスクをあなたが広範なクライアント側の検証を行っているかどうかです。妥当性検査をしていて、エラーメッセージのページに値を戻した場合、問題が発生する可能性があります。

たとえば、数字のみを含むテキストボックスがあり、ユーザーがそのテキストボックスに文字を入力するとします。 "somevalue 'がこのテキストボックスに無効な値である"のようなエラーメッセージがクライアント側のスクリプトで生成された場合、ユーザーはボックスに入力した内容をページに戻します。いずれにしても、ユーザーのセッションにのみ影響します。

+0

はい、そうです、データベースに保存するかどうかを決める前にモデルを検証しているだけなので、そのような問題はそのユーザーにしか影響しません。 – conor

関連する問題