2010-11-29 3 views
0

Djangoの管理者は、GETクエリパラメータをクエリフィルタ条件に直接変換しています(私はDjangoの管理ソースコードを十分に調べていませんでした)。django - 任意のユーザー入力データをfilter()に入力できるようにする - これは安全ですか?

私はこのアプローチがユーザーに面したアプリケーションで使用するのに十分安全であると思いましたか?私は任意のWHERE節を受け入れなければならないデータのリストを持っており、クエリーセットのfilter()メソッドに渡すことができるように、GETパラメータを辞書に変換して実装することを考えています。

答えて

0

私は、Djangoはちょうど任意のクエリフィルタを構築するからユーザーを防ぐ1.2.4と1.3b1にセキュリティフィックスをリリースし

http://www.djangoproject.com/weblog/2010/dec/22/security/

正しい答えは「いいえ、それは安全ではない」と思います。基礎となるデータモデルと正規表現の使用方法について十分な知識があれば、ユーザーのパスワードハッシュなどの任意の情報を抽出できます。

3

はい。

入力がエスケープされるため、SQLインジェクション攻撃などはありません。ただし、検索しているフィールドの入力が無効である可能性があります。あるいは、何の意味もないかもしれないので、入力の日付が他の日付よりも大きく、入力値がXより小さくなければならないなど、何らかのバリデーションを行うことをお勧めします。

ただし、ユーザーから受け取ったデータをページの一部として表示したい場合は、適切にエスケープする必要があります。 Documentation on the autoescape tag

関連する問題