Webアプリケーションでのアクセス権の分離システム-パート1、理論

現在、私の小さな2人のチームはCMSの開発に忙しくしています。 それらがすでにいくつあるかを想像しますが、貢献したいと思います。



以下に、CMSのアクセス制御システムに関する私の考えを共有したいと思います。 非常に独創的で興味深いようです。





実装について考えて、次の目標を設定しました。



その結果、私は、最適なアナログはUNIXの必須ファイルアクセスシステムであるという結論に達しました。 777の1つです。:)当然、Webの向きの修正により、ディレクトリの代わりに、ファイルの代わりにカテゴリがあります-さまざまなWebオブジェクトなど。 以下のすべてについて。



最も一般的な近似では、システムはすべてのオブジェクトの識別子とそれらへのアクセス権を含むテーブルを保存します。



技術的な問題(オブジェクトキーの不均一性、開発者の裁量によるシステムの使用など)、および最適化については、後で説明します。 戦略に従っています。



各オブジェクトには、所有者ユーザー、所有者グループ、およびこのオブジェクトの処理方法を説明する番号があります。 UNIXシステムでは、この番号には権利を説明するための3桁が含まれています

  1. 所有者-ユーザー;
  2. 所有者-グループ;
  3. 他のユーザー。




もう1桁あります。

  1. 所有者-ユーザー;
  2. 所有者-グループ;
  3. 他の登録ユーザー;
  4. 他の未登録ユーザー。




さて、より興味深いことについて。 オペレーティングシステムでは、原則として、読み取り、書き込み、実行の3つの操作のみを十分に制御できます。 さらに、いくつかの追加フラグ。



私たちの状況はより複雑です-制御する必要がある他の多くの操作があるかもしれません。 読み取り/書き込み/実行権限の説明では不十分です。 たとえば、広告があるサイトでは、ユーザーは広告を変更できますが、写真をアップロードすることはできません。 この機会は支払い後に開きます。 または、添付ファイルをダウンロードする機能-それも制御する必要があります。



OSとは異なり、3つの操作(これらの操作の数がある)のみが存在する場合、潜在的に無制限であることがわかります。 それらの多くがあり、さらに、アプリケーションごとに異なる場合があります。 しかし、これには美しい解決策があります。



各桁は上位バイトに分割できます。これは、すべてのオブジェクトの最も標準的な操作であり、一部は将来のために予約されています。 そして、アプリケーション自体が決定できる下位バイト。 彼が確かに十分な標準的なものを持っていない場合。



UNIXのようにフラグが必要だとは思いません。 フラグは、必要な場合にのみビット深度を追加します。 アクセスマスク自体にフラグがあります(この用語が適合することを望みます)。



その結果、記事では、次のようなアクセスマスクを取得できます。

画像



これは何を意味し、誰に、何が許可されているのか-図から明らかだと思います。



各グループには2つのサブグループがあります。 4ビットの最初のサブグループは、最も標準的なもののために予約されています。 2番目のサブグループは、各モジュールによって個別に決定されます。 たとえば、そこにファイルを配置する可能性について説明します。



データベースでは、このマスクは番号3 633 352 832として書き込まれます。



この例では、ビット幅は32ビットです-データ型はINTです。 これは一例です。 実際には、おそらく64ビットBIGINTを使用します。 したがって、すべてのグループとサブグループは2回を超えます。



使用することをお勧めします-オブジェクトにアクセスしようとする場合-モジュールはオブジェクトへのアクセス権を要求する必要があります。 システムは、この番号をデータベースから抽出し、ビットで解析して、美しい形式でモジュールに返します。 便利に処理された配列の形で考えてみましょう。 その後、モジュールは期待どおりに進むはずです。



権利テーブルのエントリの数は、システム内のオブジェクトの数から直線的に増加します。 原則として、これは耐えられますが、さらに美しくすることができます-モジュールの標準マスクを選択します。 また、非標準の権限を持つオブジェクトのみをテーブルに書き込むことができます-レコードの数は桁違いに減少します。



開発者にこのシステムの使用を強制することはできません。 ただし、それを使用する場合、次の利点があります。

すべてが完了した-それを取り、それを使用します。

コードを間違える可能性が低い。

すべてのモジュールとそのオブジェクトのユーザーは、1つの普遍的で使い慣れたインターフェイスを持ちます。



ところで、このシステムを使用しても、他のアクセス制御方法は除外されません。 アクセスリストなど。



コミュニティが記事を気に入った場合、記事が表示されますWebアプリケーションでアクセス権を共有するためのシステム-練習。 :)



PSセキュリティ理論では、それほど強力ではありません。どこで間違えたとしても正しいです。



PPS私はウェブ上で同様のシステムを見たことはありませんが、どこか遠く、あるいは近いかもしれませんが、そうです。 その場合、リンクをドロップします。



PPPS habrの最初の投稿-「子供の」エラーが発生する可能性がありますので、明記してください-すぐに訂正します。



更新 :CMSに関するブログ投稿とHabrのメインページへの投稿。 ありがとう、ハブラ :)

私のイデオロギー的に非常に近い良い記事へのリンクの投稿と変身を移動してくれたカルマのmexxvに特に感謝します。



ブログでメインのHabrに乗ってうれしかったです。 まだ情報を公開していません。ハブラー効果に耐えられないのではないかと心配しています。事前に準備する必要があります。 :)



そして今、ケースに。 コメントは提案されたシステムの主な問題を理解するのに役立ちました-柔軟性はまだ十分ではありません。 もっと必要です。 たぶん、優れた継承機能のために、ACLとハイブリッドを使用している可能性があります。 すべての有意義な結果を明日に届けようとします。



更新mephiusによると、ALCの調味料で提案したアイデアは非常に クールなサイトで機能します。



ところで、私は最初のhabraynvaytを獲得しました。 :)))



All Articles