3

わかりました、ここで私が言いたいことの例を挙げるのがおそらく最善です.

システムが認識している何らかの外部メソッドによってユーザー認証が行われる Web ベースのフォーラム システムを想像してみてください。

たとえば、ユーザーがアクセス権のないスレッドの URL を入力したとします。このため、ユーザーに別の認証方法を試す必要があることを知らせる 403 (Forbidden) を返すか、アクセスするものがあることを知らせない 404 を返す必要があります。

私が 403 を返すとすると、まだ存在しないトピックの URL にアクセスしたときにも 403 を返す必要がありますか?

編集: 上記の例は、何か IRL の例に近いものでした。

別の例として、次のようなものを公開するとします

/adminnotes/user

ユーザーに関する管理者メモがある場合。ここで、403 を返すと、ユーザーについて何か言われていることがユーザーに通知されます。404は何も言わないでしょう。

しかし、もし私が 403 を返せば、adminnotes/* に対して返すことができ、その問題を解決できます。

編集 2: 別の例。ここでソフト削除された質問は 404 を返します。ただし、適切な認証とアクセスがあれば、引き続きそれらを見ることができます (推測します)。

4

9 に答える 9

5

何よりも、HTTP 仕様に準拠します。404 の代わりに 403 を返すのは良くありません。403 の代わりに 404 を返すことはおそらく問題ありません (または大きな間違いではありません) が、ソフトウェアに真実を伝えさせます。ユーザーがトピックの ID しか知らない場合は、とにかく大したことではありません。そして、このトピックが存在するかどうかを判断するためにタイミング攻撃を試みることができました。

于 2008-09-29T06:57:52.383 に答える
4

NoSuchPageOrNoPermissions.html への 307 リダイレクトを使用して、ユーザーに URL の入力ミスか権限がないことを適切に伝えます。

これによりコンプライアンスが破られることはなく、間違ったメッセージが送信されることもありません。

非常に偏執的である場合は、リダイレクトを返す前にランダムな待機を行うことができるため、時間分析が難しくなります。

ここでディレクトリを保護する理由を尋ねるすべての人については、これらの例を試してください

1. ユーザー名

私たちが ISP であり、各ユーザーに www.isp.example/home/USERNAME の Web ページと USERNAME@isp.example の電子メール アドレスを提供するとします。攻撃者がリクエストを www.isp.example/home/[ランダム] に送信して辞書攻撃を行い、それが有効なユーザー名であるかどうかを判断できた場合、有効なメール アドレスのリストを生成して、悪意のある人物に販売することができます。

2. 何のフォルダ

ボブは立候補しており、ポスターのアカウントを持っており、自分のサイトを使用して個人情報を保存しています。しかし、彼の公開ページは www.example.com/Bob にあり、彼の秘密のフォルダーは www.example.com/Bob/IceCream であるプライベート フォルダーにすることで、それを保護しました。ただし、www.example.com/Bob/Cake は 404 を返します。Bob の秘密はケーキではなくアイスクリームだからです。

レポーターのアリスがボブのサイトに辞書攻撃をしようとしている

  • www.example.com/Bob/Cake - 404
  • www.example.com/Bob/Donuts - 404
  • www.example.com/Bob/Lollies - 404
  • www.example.com/Bob/IceCream - 403

アリスはボブの秘密を知り、アイスクリームを食べるボブの信用を落とすことができます。

于 2008-10-02T15:48:12.257 に答える
3

非特権クライアントを「/adminnotes/」にリダイレクトするには、「/adminnotes/user」のリクエストに対して 307 (Temporary Redirect) を送信する必要があると思います。したがって、クライアントは「/adminnotes/」を要求するため、禁止されているため、403 を返すことができます。

このようにして、アプリケーションは HTTP に準拠したままになり、権限のないユーザーは保護されたデータについてあまり学習しません。

于 2008-09-29T15:38:46.953 に答える
2

特定のスレッドの存在をユーザーから隠すことによって保護される「プライバシー」は何ですか?

アクセスできないスレッドで 403 または 404 を返すことは問題ないと思います。存在しないスレッドで 403 を返すのは良くありません。

于 2008-09-29T06:56:43.480 に答える
1

あなたが提案していることを実行するウェブサイトは世界中にないため、この例では、標準に従い、リソースが存在しない場合は 404 を返し、禁止されている場合は 403 を返すことがおそらく最善であることがわかります。

于 2008-09-29T06:53:56.467 に答える
1

404 も技術的には情報を明らかにする可能性があることを忘れないでください。たとえば、誰が管理者メモを持っていないかを知ることができます。状況によっては、これはリソースが存在したことを示すのと同じくらい悪いことになる可能性があります。

私の意見では、エラーは嘘をつくべきではありません。404 を指定した場合は、常にリソースが存在しないということになります。

機密情報を扱っている場合は、ユーザーがリソースに対するアクセス許可を持っていないといつでも言えます。これには、必ずしもリソースが存在する必要はありません。クライアントには、リソースが存在するかどうかを知る権限さえない場合があります。したがって、/adminnotes/ の任意の組み合わせに対して、許可拒否エラーを提供する必要があります。

とはいえ、公式の仕様は一致していないようです。公式のrfcがhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec10.htmlでエラーについて述べていることは次のとおりです。

10.4.4 403 Forbidden サーバーは要求を理解しましたが、要求を満たすことを拒否しています。承認は役に立たず、要求を繰り返すべきではありません。リクエスト メソッドが HEAD ではなく、サーバーがリクエストが実行されなかった理由を公開したい場合、拒否の理由をエンティティに記述する必要があります。サーバーがこの情報をクライアントに提供したくない場合は、代わりにステータス コード 404 (Not Found) を使用できます。

10.4.5 404 Not Found サーバーは Request-URI に一致するものを見つけられませんでした。状態が一時的なものか永続的なものかは示されていません。410 (Gone) ステータス コードは、古いリソースが永続的に利用できず、転送アドレスがないことを内部で構成可能なメカニズムを通じてサーバーが認識している場合に使用する必要があります。このステータス コードは、サーバーが要求が拒否された理由を正確に明らかにしたくない場合、または他の応答が適用できない場合に一般的に使用されます。

私は専門家ではありませんが、リソースが存在する可能性があるのに「見つかりません」と言うのはくだらないと思います。リソースが存在することを保証せずに、「禁止」を希望します。これは、見つけるために何らかの方法で認証する必要があることを意味します。

于 2008-11-16T04:50:16.070 に答える
1

URL のプライバシーの問題を心配する理由がわかりません。stackoverflow の場合、QuestionID 番号の後に任意のテキストを配置できます。たとえば、「正しい」エラー コードを返すか、プライバシーを保護しますか? それでもこの質問に戻ります。

于 2008-09-29T07:14:10.660 に答える
0

ユーザーが正しいアクセス権を持っていないことを検出したときに、「ページが見つかりません」というエラーを返したとします。ハッキングを目的とする悪意のある人物は、アクセスが拒否された代わりにこれを返すことにすぐに気付くでしょう。

しかし、URL をタイプミスしたり、間違ったログインを使用したりする実際のユーザーは混乱し、お客様や TAC などにあなたの立場を説明するために説明やリリース ノートが尽きることはありません。何と引き換えに ?

意図は良いのですが、残念ながらあなたが提案したこのポリシーは、あなたが望んだようにうまくいかないかもしれません.

于 2008-09-29T07:09:44.367 に答える
0

私の提案は次のとおりです。

  1. Not Exists_Thread の場合は 404 を返します
  2. User_Can_Access_to_this_Thread でない場合は、403 を返します
于 2008-09-29T07:10:00.903 に答える