問題タブ [role-base-authorization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - ユーザーベースの承認で SQL へのラウンドトリップを最小限に抑えるにはどうすればよいですか?
コンテキスト: SQL DB に支えられた MVC Web サービス。データベースにユーザー リレーションがあり、一連の FK を介してそれを参照するリレーションのセットがあるとします。たとえば、次のテーブルがあるとします。
営業担当者が特定の自動車販売店に所属している場合、自動車もそうです。営業担当者は、特定のディーラーに属する車のみを表示できる必要があります。ここにはいくつかのオプションがあります。
認可ビジネス ロジックを SQL クエリ自体に組み込むことができます。
発信者が sales_people ID が正当であり、その ID の些細ななりすましを防いでいることを確認したと仮定すると、上記のクエリは、ユーザーが自分のものではない車を手に入れるのを防ぎます。結合が大規模すぎない限り、これはおそらく任意の数のテーブルに拡張できます。
アップサイド?1 回の DB 呼び出し。
欠点?
- ここでの承認ビジネス ロジックは非常に基本的なものです。これらのテーブルのいずれかによって参照されているユーザーですか? もちろん、合格できます。しかし、もっと複雑なアクセス ルールが必要だとしましょう。1 つの単純なクエリでは実行できない可能性があります。
- ユーザーが許可されていない行を要求したのか、行が許可されているが実際には存在しないのかを判断するのは難しいため、エラー報告が難しくなります。200 と 403 のどちらを報告する必要があるかはわかりません (ただし、API のタイプによっては、これらの場合に常に 200 を使用して、攻撃者に過度の情報が公開されるのを防ぐことができます)。
私が目にする他のオプションは、データが実際にそのユーザーにアクセス可能であることを検証するために、事実の前または後に追加のクエリを作成することです。たとえば、営業担当者が取得を許可されている車の ID のリストを取得し、そのサブセットに対してクエリを実行するか、またはその逆です。
利点は明らかに、ビジネス レイヤーでより多くの呼び出しを行い、より多くのロジックを実行できることです。
欠点は、より多くの DB トラフィックを生成することです。これは、その要求が行われる頻度によっては契約を破る可能性があります。
ここには他にもいくつかのオプションが欠けている可能性があります。以前に問題をどのように解決したかを知りたいです。より良い方法はありますか?
spring-security - memberOf属性に基づくldapを使用したSpringセキュリティ認証
LDAPに対して春の認証を使用しています。指定されたユーザー ID とパスワードが LDAP に存在する場合、ユーザー ログインを取得できました。LDAP のユーザーの memberOf 属性に基づいてこれを制限したいと思います。ユーザーが特定の CN 値 (CN=adminaccess または CN=superadminaccess) を持つ memberOf 属性を持っている場合、認証/承認はパスする必要があります。それ以外の場合、認証/承認は失敗するはずです。
上記の構成では、常にアクセス拒否ページにアクセスします。access="hasAnyRole('ROLE_ADMINACCESS','ROLE_SUPERADMINACCESS')" を security:intercept-url から削除すると、たとえユーザーが adminaccess (これは私のグループ -search-base が CN=adminaccess を指定していたので、制限されることを望んでいました)。構成がどうあるべきか疑問に思っています:
- memberOf CN=adminaccess および/または CN=superadminaccess であるユーザーだけにアクセスを制限するには
- 正しいグループ検索ベースを指定してください。CN=Users のみを指定すると、会社の LDAP に違反するため、タイムアウトが発生します。LDAP ブラウザーでユーザーを調べたところ、役立つ "ou" が見つかりませんでした。上記の構成 group-search-base="CN=adminaccess,CN=Users" では、タイムアウトは発生しませんが、正しいとは思いません
php - php ロールベースのアクセス制御システム - ページごとの許可
システムの設計を行っていただきます。システムには 3 つのユーザー タイプがあります。管理者、マネージャー、開発者。アプリケーションは 100 の php UI ページで構成されています。
- データベーステーブルはこのようなものです(ページ、管理者、マネージャー、開発者)。page はページ名、admin、manager、developer はブール フィールドです。特定のフィールドが 1 または true の場合、ロールにはアクセス権限があります。
- ここで、データベースを 100 ページすべてと同期する必要があります。ログインしたユーザーがどのロールに属しているかを知っています。しかし、ページを渡してテーブルと照合して、特定のユーザーがアクセスできるかどうかを確認する方法がわかりません。
私の計画は、checkpermission($_SERVER['PHP_SELF'], $role); を置くことです。各ページへ。これを適切に行うにはどうすればよいですか?この行をheader.phpに入れてもよろしいですか?それは悪いデザインでしょうか?
私のリードの主な関心事は拡張性です。彼は、あまり変更せずに別のサイトをプラグインしたいと考えています。また、ページを提供したいと考えています。管理者はそのページを使用して権限を付与、削除できます。権限ツリーにサブディレクトリを追加します。
sql - REST でのデータ レベルの承認
Project(id, name, userId) テーブルと Activity テーブル (id, title, description, project_id) があります。project_id は Project テーブルの id を指す外部キーです。プロジェクト データは、それを作成したユーザーのみがアクセスできます。
これで、特定のプロジェクトの新しいアクティビティを作成するために REST Api が公開されました。
方法: ポスト
本文 { "title" : "テスト活動", "description" : "テストの説明", "project_id" : "123"
}
Web アプリケーションによって消費されます。ただし、もちろん、外部 REST クライアントでも使用できます。
問題: 「プロジェクト P」を作成していないユーザーは、上記の Rest 呼び出しで「プロジェクト P」の ID を指定することにより、「プロジェクト P」にアクティビティを追加できます。これを未然に防ぎたい。特定のプロジェクト ID からプロジェクト データを取得し、現在のユーザーがプロジェクトを所有しているかどうかを確認することで、検証ロジックを作成できますが、より一般的なソリューションが必要です。また、これは挿入のみの問題であることに注意してください。何かご意見は ?
asp.net - MVC 5.1.0 を使用した MVC 5 ロール ベースの認証
プロジェクトでロール ベースの認証を使用する際に問題が発生しています。
いくつかの役割を設定し、それらをユーザーにリンクしました。
これは機能します:
ログインしていない場合は、ログインするように求められます。
ただし、次のように変更すると:
そして、そのロールを持つユーザーからアクセスしようとすると、ログインするように求められます。
だから私はいくつかのゴーグルをしました、そして私はこの投稿を見つけました:リンク そして彼らは追加することを提案しました:
私のウェブ設定で。私がしたことで、コントローラーにアクセスできるようになりました。しかし、私がその役割にいるかどうかにかかわらず、コントローラーにアクセスできることに気付きました。
プロジェクトに Cookie 認証を使用しています。そのため、さまざまな種類の認証の間で混乱していると思います。
だから私はここからどこへ行くべきかについていくつかのアドバイスが必要です:
デフォルトのプロジェクトで実装されているロールを利用したいだけで、データベースなどにデータを入力しました。フィルターを機能させることができません。