1

Django の Content-Type を使用して、プロジェクト内のさまざまなアプリを分離できるようにしようとしていますが、とても気に入っています。しかし、気になる点があります。セキュリティです。

私が使用している方法は、content_typeおよびのパラメーターである GET を介して渡すことですobject_id。とにかく、すべてが私のサイトで公開されているので、今のところはこれで十分です。

しかし、私のサイトの非公開セクションについて考えると、あるユーザーが別のユーザーの URL アクセス情報を変更する可能性があるのではないかと心配しています。この問題を回避するために多くのオプションを考えましたが、よくわかりません。これを GET ではなく POST で渡すことが最初に実行できるように思えますが、それは実際の問題を回避するだけです。また、ログインしたユーザーのアクセス許可をテストすると考えましたが、一般的な関係を扱っているため、アクセス許可を認証するために必要なテストの種類は明らかではありません。おそらく、Cookieまたはコンテキスト変数を使用するもの...

それで、これらの場合に Content-Type をどのように使用するかを尋ねてみました。このすばらしい機能を適切に使用する方法の良い例がいくつかありません。

何か助けはありますか?

4

1 に答える 1

2

答えは、モデルとアプリケーションによって大きく異なります。コンテンツ タイプ フレームワークをどの程度正確に使用していますか?

一般的に言えば、コンテンツ タイプ フレームワークの使用を制御する追加の抽象化レイヤーを用意することをお勧めします。

例を作ってみましょう。これらのモデルがあるとしましょう: PortalCube、およびCakePortalおよびCubeパブリックCakeですが、特定の権限を持つユーザーに対してプライベートです。

私があなたを理解している限り、あなたのアプローチは次のようなものです:

# gets called via GET with parameters content_type_id and object_id
def modify_object(request, content_type_id, object_id)
    content_type = ContentType.objects.get_for_id(content_type_id)
    model_class = content_type.model_class()
    instance = model_class.objects.get(pk=object_id)
    # modify instance - could also be a "Cake"
    instance.save()

特定のタイプのオブジェクトのみを変更できるようにしたい場合、これは脆弱です。content_type のチェックを追加することもできますが、それは非常に洗練されていて、巧妙に設計されているようには見えません。

代わりに、一般的ではないアプローチを採用します。ユーザーに許可するモデルのさまざまなタスクごとにメソッドを定義します。

def create_portal(request, object_id):
    portal = Portal.objects.get(pk=object_id)
    # create the portal
    portal.save()

def carry_cube(request, object_id):
    # load, move the cube and save

@permission_required('cake.can_eat')
def eat_cake(request, object_id):
    # this will only be performed if the current user has the required permissions
    # load, eat the delicious cake and save

うまくいけば、その情報は役に立ちます。あなたの側からより多くの情報を提供することで、より詳細な回答を提供しやすくなります。

于 2013-05-29T00:16:55.297 に答える