web-dev-qa-db-ja.com

アクセス拒否:403または404?

誰かが見ることを許可されていないエンティティへのアクセスをリクエストした場合、どのステータスコードが返されますか?おそらく403:Forbiddenです。しかし、代わりに404を返すことは一般的な方法ですか?彼がそれを見ることが許可されていない場合でも、誰かがこの実体が存在することを誰かに知られたくない。どう思いますか?

18
Robo Robok

404 Not foundを使用します。

404ステータスコードは、403シナリオで使用することもできます。この場合、サーバーは、リクエストの処理を拒否する理由を送り返しません。 良い例は、サーバーが何らかの攻撃を検知した場合です。これは、ブルートフォース攻撃である可能性があります。この場合、サーバーは403 Forbiddenの代わりに404 Not foundと説明で応答します。

ソース: Pro ASP.NET Web API Security

27
Teoman shipahi

403 Forbiddenを返します。すべてのリクエストに対してこれを返す場合、クライアントはアクセスを許可されず、never404 Not Foundを返す場合、クライアントは何も知りません。

それはすべて、これがあなたにとってどれほど重要であるかに依存します。

彼がそれを見ることが許可されていない場合でも、誰かがこの実体が存在することを誰かに知られたくない。

これが本当に重要な場合は、常に403 Forbiddenを返します。

1
user1907906

うーん..場合によります.

エンドポイントのURLが機密情報を明らかにする場合(たとえば、Dropbox APIでは、IDではなくファイルの名前でファイルを参照しているため、URLにはファイル名が含まれています)、または順次ID(たとえば、昇順のID)を使用しているブルートフォース可能)、404を返します。

権限を持たないリソースへの「アクセスのリクエスト」機能をサポートする必要がある場合は、403を返して、クライアント側で違いがわかるようにします。

一般的に言って、APIがIDを使用し、URLの一部として情報を公開せず、IDとしてUUIDを使用している場合、私は403 ..を使用することになります。 ..)。

0