web-dev-qa-db-ja.com

ユーザーに403不正アクセスエラーを表示することは良い習慣ですか?

403アクセス禁止のアクセスエラーページが表示されるたびに、秘密またはプライベートデータが存在する場所に到達したと思います。この時点で、悪意のあるユーザーはこれが重要である可能性があることを理解し、この秘密データにアクセスするために何かできるかどうかを確認し始めます。

それで、このエラーを表示するか、単に他の場所にリダイレクトするのが良いですか?

編集

エラーに対処することを考えているのは、その特定のリソースにアクセスするために別のログインページにリダイレクトすることです。しかし、この場合も、アプリケーションを介してこれらのリソースにアクセスできるようにしたくない場合はどうすればよいでしょうか。オフコース管理者は、バックエンドで他の手段によって同じリソースにアクセスできます。

28
ThankYouSRT

本番環境では、通常、できるだけ少ない情報を公開する必要があります。そのためには、一般的なエラーコードを表示することをお勧めします。

  • エラー4 クライアント関連のエラーの場合:不正な要求、認証が必要など.
  • エラー5 サーバー関連のエラーの場合:データベースのダウン、メンテナンスのためのサイトのダウンなど.

理想的には、Webサーバーによって提供されるデフォルトのエラーページを選択しないでください。 独自のエラーページを作成する 、または攻撃者が使用する可能性のある情報を隠す方法でデフォルトのエラーページを編集します。たとえば、パスワードで保護されたURLにアクセスしたときのサーバーのエラーは次のとおりです。

enter image description here

それを超えると、それは純粋なユーザビリティの問題であり、ケースに大きく依存します。ユーザーをホームページにリダイレクトしないでください。それらの領域はパスワードで保護されていますか?ログインフォームを表示する必要がありますか?または、単にサイトのスタイルで一般的なエラーメッセージを表示したいですか?

これが私たちのサイトのエラーページの例です(Security.StackExchange)

enter image description here

10
Adi

@Adnanが言うように、本番環境では情報漏えいを制限する必要があります。リダイレクトは攻撃者にも役立ちます。

もう少しお勧めしますが、エラーの種類を制限するだけでなく、カスタマイズされたエラーページだけをエンドユーザーに配信する必要があります。

デフォルトの400ページまたは500ページには、多くの場合、エラーに関する豊富な情報が含まれています。これは攻撃者にとって非常に役立ちます。実行されているソフトウェア、Webサーバー、OSなどを見つけることができます。

したがって、エラーコンテキストでの一般的な推奨事項は、エラーを認識して何も提供しないカスタマイズされたページをユーザーに配信することです。次に例を示します。

enter image description here

内部的にはすべてのエラーをログに記録する必要があるため、エラーを処理できます。

9
Rory Alsop

はい、それは認証が成功したことを意味しますが、アカウントにはこのリソースを表示する権限がありません。 RFC2616 に従って、代わりにHTTP 404を使用できます。ただし、403を返すと次のような利点があるため、これはお勧めしません。

  1. 複数のアカウント(つまり、Active Directory)を持つシステムの場合、これは、ユーザーがおそらく間違ったアカウントでログインし、別のアカウントを試す必要があるという必要な情報を提供します。
  2. ユーザーが正当にアクセスを必要とする場合、ヘルプデスクチケットは、403を取得していることがわかっているため、すばやく処理できます。

あなたのシナリオでは、「悪者」はすでに正常にログインしています。うまくいけば、承認プロセスは、さらなる損傷を防ぐのに十分なほど堅牢です(つまり、クエリ文字列を使用しないでください)。

多くの人が詳細なエラーメッセージをオフにすることについてコメントしていますが、これはベストプラクティスであることに同意します。ただし、403は、興味深い情報が画面に出力されるHTTP 500などのサーバーエラーとは大きく異なります。繰り返しになりますが、403は、ログインに成功した後で特定のリソースを表示する権限がないことを意味します。したがって、403を返し続けますが、詳細な診断情報は含めないでください。

これが非常に機密性の高いリソースである場合、それを分離することを検討し、二要素認証を要求します。これにより、保護されたリソースにアクセスするときに、その人が本当の自分であると主張するセキュリティがさらに強化されます。

6
user2320464

最初のの質問に答えるために、このエラーをエンドユーザーに表示するのはnot goodです。

正確な技術的詳細を含むデフォルトのエラーページを表示するのは非推奨です。セキュリティとユーザーエクスペリエンスの両方の問題があります。

ユーザーが技術者ではない場合、この種のエラーメッセージは、技術的なものすべてに非常に悩まされる可能性があります。彼は、自分が理解しているエラーを解決する方法を知りません。

一方、ユーザーが技術者である場合(悪い人を言う)、ユーザーがアプリケーションのセキュリティ構造を垣間見る、または全体的なアイデアを得る可能性があります。 attacks彼があなたのアプリケーションを壊そうとするので、彼があなたのアプリケーションのセキュリティパターンを見つけた場合、公開されるかなりのチャンスがありますより具体的 =。

secondの質問に答えるために、他のページにリダイレクトすることは、ユーザーフレンドリーなアイデアとしては適切ではないようです。

ユーザーが何かにアクセスしようとすると、ホームページやその他のページに直接リダイレクトされ、使いやすさを損なうとなり、ユーザーはアプリケーションに興味を示します。本当に彼をどこかにリダイレクトしたい場合は、きちんとしたカスタマイズされたメッセージを見せてからリダイレクトします。それで彼は少なくとも何が起こっているのかを知るでしょう。

エラー処理は問題の解決策です。エラーメッセージを準備するときは、常にユーザーの視点で考えてください。 Showは、ユーザーが簡単に理解できるエラーメッセージをカスタマイズし、アプリケーションのセキュリティ構造を公開しません。

最終行-ユーザーに通知する前に、あらゆる種類のエラーをhandledおよびcustomizedにする必要があります。

4

それは良い習慣ですか?場合によります。デフォルトのページをユーザーに送信したくないだけだと思います。これはユーザビリティを台無しにし、技術的な詳細がある場合、攻撃者に多くの情報を提供します。

しかし、より一般的には403エラーを送信するのはどうですか?ここで私はそれが一般に悪い考えであると確信していません、そしてより大きな問題は何が起こっているのか、または403エラーが発生しているのはなぜですか?

デフォルトのエラーページで403エラーが表示された場合、または特にログインさえしていない場合、これは「無能な管理者」と悲鳴を上げているため、サイトについて明らかにした内容ではなく、サイトの内容からそれほど攻撃を誘っていないようです。あなたの管理者について明らかにします。

しかし、ログインしているとしましょう。認証されました。 403アクセスが拒否されましたというエラーメッセージ以外のメッセージが返されるはずであるという、表示する権限のないリソースにアクセスしようとする理由はありますか?エラーコードを返すことで、クライアント側でプログラム的に処理できるようになります。これは、Webサービスなどの重要な考慮事項です。

これで、UIで公開されている何かを実行しようとしたときに、これが発生することはありません。しかし、追加の防御層とエラー処理の機会として、この場合はエラーコードを返すことに問題はありません。エラーコードを渡すことが原因(ここでも、Webサービスが頭に浮かぶ)があるためです。最善の方法です。

これを念頭に置いて、私は偏見のない見方をする必要があるいくつかのことを確認します。

攻撃者を助けることができるどの情報が漏えいしましたか?エラーメッセージにどのような情報を提供する必要がありますか?

一般に、LedgerSMBでは広範囲にログを記録しますが、賢明なアクセス拒否は、クライアント側の非常に短いメッセージです。これにより、管理者は何が起こっているかを確認できますが、ユーザーは確認できません。

エラーを処理するためにクライアントが最低限知っておく必要があることは何ですか?

通常、IMO、ログインしているにもかかわらず、そのアクセスが拒否されました。ここでは403が役立ちますが、これ以上は送信したくありません。

他にどんな懸念がありますか?

多くのことが脅威モデルに依存しています。顧客向けWebアプリケーションの脅威モデルは、基幹業務Webアプリケーションとは大きく異なり、サブスクリプションWebサービスとは異なります。先に進む前に、何を保護し、何から保護しているのかを知る必要があります。

2
Chris Travers

質問のコンテキストを見ると、アクセスするにはログインが必要な管理ページのようです。許可されていないユーザーに403エラーを表示することにより、URLを推測した人にページが存在することを知らせて、アクセスできないことを心配しています。

明らかに、エラーページは、もしあれば、サーバーのアーキテクチャやバージョンなどの情報を開示すべきではありません。私はこれらの非常に基本的なことを再び繰り返すつもりはありません。ここにはいくつかのオプションがあります。さまざまなオプションを見てみましょう。

管理者ログインページへのリダイレクト:

これは、管理者の観点からすると便利です。セッションタイムアウトが発生した可能性があります。このページへのリンクをクリックした管理者は、ログインページに直接リダイレクトされ、特権アクセスを続行します。他のユーザーと同様に、ログインページにもリダイレクトされます。それが隠しログインである場合、それはハッカーへのドアを見せることと同じです。この場合、リダイレクトしないことを強くお勧めします。

ディスプレイ403エラー:

このエラーは明白です。管理者とユーザーの両方が、許可されていないためにアクセスが拒否されたことを理解できます。管理者にとって、これはセッションタイムアウトが原因であるか、認識されていないIPアドレスからページにアクセスしていることが原因である可能性があります。さて、断固たるハッカーは、このページで試行錯誤する機会もあるかもしれません。問題は、あなたはそれについて心配すべきですか?ページ自体がユーザー入力を受け入れず、コードがクリーンで適切に記述されていると確信している場合は、そうするべきではありません。

表示404エラー:

404エラーを表示すると、実際には obscurityによるセキュリティ を実行しています。セキュリティは確実に向上しますが、それだけに頼るべきではありません。ユーザーは通常、404ファイルが見つかりませんというエラーが表示されたときに続行します。予想とは異なるエラーコードが表示されると、管理者が混乱する可能性があるため、ここにはトレードオフがあります。管理者がこれを知っていれば、それほど問題にはなりません。

あなたが心配しているので、あなたはこの質問をしています。心の平安を得るために、私は3番目のオプションを選びます。ただし、最終的には、Webアプリケーションのセキュリティ要件に基づいて決定する必要があります。

2