0

私はDjangoが初めてです。昨夜、私は現在のプロジェクトのエンティティを編集できるようにするビューに懸命に取り組みました。チャプター、ストーリー、ワールド。どのデータベース オブジェクトが変更されているかを正確に把握するために、ハッシュ、編集中のオブジェクトのタイプ (「チャプター」など)、およびその ID を格納するデータベース エントリをテーブル「edits」に追加しました。データベースで見つかったオブジェクト。ハッシュは非表示の入力としてフォームに追加されます。

バックエンドでは、フォームが送信された後、ハッシュを取得し、それを使用してデータベース内の関連する編集項目を見つけます。次に、これを使用して、最初に編集されていたオブジェクトを見つけます。これは、次の 2 つの理由で行われました。

  1. どのオブジェクトが本当に編集されているかを知ることができます。すべてのフォーム項目が変更された場合、どのオブジェクトが編集されているかを実際に知るために (URL を除いて) 比較するものは何もありません。

  2. ユーザーがフロントエンドをハッキングして、間違ったストーリーを変更するなどの奇妙なことを実行できないようにする必要があります。

今日、Django には と呼ばれる一般的なビューがあることを発見しましたupdate_object。これは私にとって多くのことを処理しているようです。しかし、データベースを自動的に使用して正しいオブジェクトが編集されていることを確認したり、どのオブジェクトが編集されているかを判別したりしない場合、これは安全でしょうか? HTML 要素を変更することで、フロント エンドでハッキングする簡単な方法が必ずあるはずです。

第二に、これが懸念される場合は、独自の編集ビューを保持するか、update_object ビューを拡張するか、またはその他の解決策をお勧めしますか?

最後に、私はこれを正しい方法で行っていますか? この問題の解決策を正しく考えていない場合は、修正してください。

これがコードを必要とする質問だとは思いません。Django に関連するフォームのセキュリティに関する一般的な質問です。

ありがとう、

パラゴンRG

4

1 に答える 1

1

どのオブジェクトを編集しているかを知るという問題は、通常、URL を調べるか、データベース ID だけを持つ非表示のフォーム要素によって解決されます。

ユーザー フォームからの変更を受け入れる前に、ユーザーが求めていることを実行する権限をユーザーが持っていること、および編集が理にかなっていることを確認する必要があります。これは通常、フォーム バリデータやビュー内の明示的なチェックを使用して行います。これは、許可されていないDBの変更を人々が行っていないことを保証するため、この問題に対処するためのやや安全な方法ですが、Editオブジェクトアプローチではそれを回避できると考えられます。

このアプローチを取る場合、ユーザーが非表示の ID フィールドを編集して別のオブジェクトを編集しているふりをすることが問題になる理由はわかりません。別の編集リンクに移動できたはずなのに、ばかげた回り道を使って編集しているだけです。

(また、Django 1.3 以降を使用しているUpdateView場合は、関数ベースではなく、新しいクラスベースを使用することをお勧めしますupdate_object。)

于 2012-04-18T21:29:20.717 に答える