0

コントローラーでパラメーターを検証するベスト プラクティスはありますか?

@user = User.find_by_id(params[:id]) 

:idたとえば、「/users/test」にアクセスして、パラメーターを改ざんして無効なパラメーターを指定すると、次のエラーが生成される可能性があります。

Conversion failed when converting the nvarchar value 'test' to data type int.

私は今、モデルに直接渡されず、モデルの検証によって検証できるパラメーターについて考えています。

4

1 に答える 1

2

はい、常にパラメーターを検証する必要があります。人々はいつでも Web ブラウザーのアドレス バーのパラメーターをいじったり、DOM に保存されているパラメーターを変更したりできます。パラメータが台無しになる可能性がある別の例は、Web ページが長時間開いたままになっている場合です。誰かが「/users/3/edit」ページを表示し、1 時間開いたままにし、その後更新するとします。その間、そのユーザーは削除された可能性があります。Web サイトがクラッシュするのは望ましくありません。適切に処理する必要があります。

データベースとアダプターによっては、実行してUser.find_by_id("test")もクラッシュしません。しかし、データベース/アダプターは文字列を整数に変換できませんでした。この特定のケースでできることの 1 つは、Ruby の.to_iメソッドを使用することです。

User.find_by_id(params[:id].to_i)

の場合params[:id] = "12"、Ruby はそれを整数に変換し12、コードは正常に実行されます。の場合params[:id] = "test"、Ruby はそれを整数に変換し0ます。ID が 0 のデータベース レコードは決して存在しないはずです。

正規表現を使用して、文字列が整数かどうかをテストすることもできます。

しかし、一般的には、エラーを適切に処理し、入ってくるデータを制御できるように、常にパラメーターを検証するようにしてください。

于 2013-09-05T15:02:45.953 に答える