2012-02-01 6 views
5

私は.get(field = ID)でデータベース行を取得する行があります。通常のユーザーは、データベースに存在するが、ハッカーは存在しない可能性があり、DoesNotExistの例外をスローして、常にIDを送信します。それを明示的にキャッチすることは重要ですか?その場合、例外をキャッチしないままにする必要がありますか?いずれにしても、ハッカーはメッセージを表示しないため、どちらの方法でもセキュリティ上のリスクはありません。通常のユーザーでは発生しないエラーを検出する必要がありますか?

この例外をログに記録するかどうかは不思議です。大まかなルールとしてあなたがしていることを聞くことに興味があり、あなたが記録しているものと捕まえているものとの対比と、捕らえられていない例外を投げ捨てるものとの関係についてのあなたの正当性に興味があります。

答えて

2

重要な部分は、このフィールドを使用しているコンテキストです。 /profile/[ID]からページにアクセスすると、というユーザーが表示されます。ページが見つかりません。あなたがそのようなことをすれば、

ID = context["user"].id 
Object.get(field = ID) 

私は別にエラーをキャッチしようとしません。

すべての点で、通常のユーザー動作では発生しないすべてのエラーを保存します。次に、エラーログを調べて、自分のサイトがどこで障害を起こしているか、またはハッカーがセキュリティホールを見つけようとしているかどうかを直接確認することができます。

これ以降、エラーログができるだけ空になるように、この未定義の動作を修正します。

+1

私は同意します。内容によって異なります。このクエリがユーザーのナビゲーションまたは入力に直接接続されているビューに存在する場合は、不正な値を処理して応答を返す必要があります。しかし、クエリがモデルレイヤーにあり、ユーザーが直接アクセスできない場合は、問題は発生しません。ボトムラインはフィルターで、すべてのユーザー入力を処理します。これにはGETとPOSTのパラメータが含まれています – jdi

+0

コンテキストはモーダル/ ajaxのポップアップでした。あなたは2つのことに基づいて、私はこのケースで 'DoesNotExist'例外をキャッチし、ユーザーがモーダルダイアログにデータベースにないIDを渡そうとすると、適切なエラーメッセージを返すことにしました。 – babonk

関連する問題