2

デフォルトですべて拒否するSpring Securityのセットアップを以下に示します(以下の例を参照)。デフォルトの deny all を変更したくありません。これは、セキュリティ構成の防御的な方法であり、良い方法と見なされているためです。明らかに、ユーザーが存在しないページにアクセスしたい場合、デフォルトではすべての戦略が拒否されるため、403 が返されます。ページが存在しない場合は結果 404 が必要で、ユーザーがアクセスを制限されている場合は 403 が必要です。この動作のために Spring Security を構成する方法はありますか?

例 :

    <intercept-url pattern="/posts/remove" access="hasRole('ADMIN')" />
    <intercept-url pattern="/posts/add" access="hasRole('EDITOR')" />
    <intercept-url pattern="/posts" access="permitAll" />
    <intercept-url pattern="/" access="permitAll" />

    <!-- Default is access denied -->
    <intercept-url pattern="/**" access="denyAll" />
</http>

ユーザーが要求する/something-that-not-existsと、404 (403 ではない) が返されます。EDITOR ユーザーが要求する/posts/removeと、403 が返されます。

4

2 に答える 2

2

あなたがしている仮定の1つは間違っていると思います。あなたが言った:

ユーザーが /something-that-not-exists を要求すると、404 (403 ではない) が返されます。

これは、次のものと直接競合します。

<intercept-url pattern="/**" access="denyAll" />

なぜなら、それが存在するかどうかにかかわらず/something-that-not-exists、保護されたリソースだからです。認証されていないユーザーとして、「有効なリソースが含まれていますか?」という質問をすることはできません。これを行うと、セキュリティ モデルに違反します。たとえば、次の架空の URL を想像してください。/something-that-not-exists

次の URL が存在するとします。

/admin/accounts/email/miles@example.com

認証されたユーザーは200 OK応答を受け取る必要があります。認証されていないユーザーは、ログイン ページにリダイレクトする必要があります。

この URLが存在しないとします。

/admin/accounts/email/coltrane@example.com 

認証されたユーザーは404 NOT FOUND応答を受け取る必要があります。認証されていないユーザーは、ログイン ページにリダイレクトする必要があります。

認証されていないユーザーに戻った場合404、攻撃者がユーザーがシステムに存在するかどうかを電子メール アドレスで照会できるセキュリティ ホールが明らかになります。

したがって、上記の仮定またはdenyAllルールは相互に排他的であるため、再考する必要があります。

于 2013-10-18T22:58:58.620 に答える
0

セキュリティ フィルタは、Web アプリケーションの URL マッピング ロジックが特定のリソースに応答するリソースがあるかどうかを判断する機会を得る前に、リクエストを傍受して処理するため、そのような構成が可能かどうかはわかりません。リクエスト。
セキュリティ フィルタがリクエスト URL を照合してアクセスを拒否することを決定した場合、その URL の背後にページがあったとしても、まったく判明しません。


編集 (Michal のコメントへの応答):

リソース/ハンドラーへの URL のマッピングは、すべてのアプリケーションでほぼ恣意的であるため、すべての Web アプリケーションに一般的に適用でき、マッピング プロセスの結果を事前に決定できるアルゴリズムを提供できるフレームワークはありません。

Web アプリケーションにそのようなロジックを実装できる場合(たとえば、URL 空間全体を知ることによって)、提案したフィルターを非常に簡単に作成できます。Spring MVC を使用する場合は、アプリケーションにデプロイさgetHandler()れたすべてを呼び出すとHandlerMapping、そのようなフィルターの実装に役立つ可能性があります。

とにかく、この種の機能を提供することは、独立しており、さまざまな Web フレームワークで動作できるように意図されているセキュリティ ライブラリの範囲内にあるとは思えません。

于 2013-05-05T07:57:57.833 に答える