web-dev-qa-db-ja.com

シークレットGETリクエストを総当たりにすることはできますか?

たとえば、サーバーに秘密にしたいページまたはフォルダーがあるとします。

example.com/fdsafdsafdsfdsfdsafdrewrew.html

または

 example.com/fdsafdsafdsfdsfdsafdrewrewaa34532543432/admin/index.html

パスの秘密の部分かなり長いですこのような秘密のページや領域があっても安全であると推測できますか?

このアプローチの一般的な問題は何ですか?

私がこれを正しく行う方法を尋ねているわけではないことに注意してください。

92
Kargari

基本的に、GETリクエストで秘密のパラメータを渡すことが安全かどうかを尋ねています。これは実際には 脆弱性 として分類されます。無効なパスが指定されるとサーバーが静的な404応答を返すだけであると想定して、十分に長い疑似ランダム文字列を総当たりにすることは現実的ではありませんが、実際にはこれを危険な手法にする多くのセキュリティ問題があります。

  • ロギングソフトウェアは、GETリクエストをプレーンテキストでログに記録しますが、POSTはログに記録しません。

  • GETを使用すると [〜#〜] csrf [〜#〜] 簡単になります* アクティブコンテンツを処理するとき。

  • リファラーヘッダーは、秘密の値を他のWebサイトに漏洩する可能性があります。

  • ブラウザの履歴には、GETリクエストで渡されたシークレットが保持されます。

2番目の例には/admin/が含まれています。これは、管理者のコンテキストでサーバーへの認証を行うには、このパスの知識だけで十分であることを意味します。これは非常に安全ではないであり、主要なWebセキュリティである/?password=hunter2のようなものは実行しないでください

代わりに、シークレットをPOSTリクエストで送信する必要があります。これが不可能な場合、または脅威モデルがのみである場合URLのブルートフォース(たとえば、使用後に即座に無効化されるパスワードリセットリンク)を防止するために、注意深く実行すれば安全なはずです。方法を提供するサイドチャネル攻撃については知りません。総当たりよりも速く文字列を取得します。

*パラメータ化されたGETリクエストを回避しても、CSRF攻撃を防ぐことはできません。これは よくある誤解 同様に悪用するさまざまな方法POST(偽のフォームなど)がありますが、 GETのシークレットはCSRFを容易にします。

121
forest

これは、URLを知っている人に限定されたパブリックなものを共有するための一般的なアプローチです。例はGoogleドキュメントです。

enter image description here

2番目のオプション「リンクを知っている全員」は、あなたと同じようなリンクを作成します。 Googleフォト、Dropboxなども同様です...

  • 利点は、コンテンツの拡散がある程度制限されることです。
  • 欠点は、これややリンクを共有する相手、リンクの公開場所などに依存することです。

あなたが考慮すべき1つのことはそれを簡単に無効にする可能性です(あなたのデータへのリンクを変更/再生成することによって)

34
WoJ

悪い考え。「秘密の」URLが検索エンジンのクローラーのヒットを非常に迅速に取得し、その後Web検索で発見されるのを何度も目にしたことがあります。誰かが彼のドメインのサブフォルダーに評判の良いウェブサイトのコピーをセットアップするのを見さえしたら、それをone人と共有し、すぐに彼にメールが送られました彼のドメインがフィッシングの目的で侵害された可能性があることを警告していることに注意してください。

どうしてそうなった?後者の場合、Webブラウザーには、アクセスしたURLを詐欺検出サービスに送信するフィッシング対策機能が組み込まれていました。他の場合では、おそらくブラウザが閲覧データを収集し、それを検索エンジンに送信してユーザーの習慣を収集していました。

これを行う場合、robots.txt(またはヘッダー/メタタグ)が設定されていることを確認して、コンテンツをインデックスに登録しないよう検索エンジンに指示します。

インターネットは、世界を近づける素晴らしい方法ですが、残念ながら、くしゃみをしていることへの永久的なアクセスをすべての人に与える可能性があります。

20
Artelius

パスの秘密の部分がかなり長い場合[...]推測したり、力ずくで押したりするのは難しいでしょうか?

はい。攻撃者がそれを発見するには、すべてを推測する必要があります。多くの可能性があるので、それは実行不可能な時間がかかります。

このアプローチの一般的な問題は何ですか?

これの問題は、URLが秘密とは見なされないため、ブラウザ、ログ、および中間プロキシによって保存されることです。これにより、「秘密」のURLが公開される可能性があります。

GETを使用すると、アクティブコンテンツの処理時にCSRFが簡単になります。

いいえ。CSRF攻撃では、攻撃者は特定のリクエストを偽造します。 URLでシークレットを使用する場合、攻撃者はリクエストを偽造するための正しいURLさえ知りません。つまり、URLが秘密である限り、CSRFは不可能です。

9
Sjoerd

他の人が述べたように、これは良い考えではありません。登録解除や同様の1回限りの目的に使用されるこのような「秘密の」リンクは、通常、有効期間が比較的短く、一度使用されると役に立たなくなります。

私がこの質問を読んだときの私の最初の考えは、URLが長い間秘密にされないだろうということでした。 Chrome(または他の最新のWebブラウザ)は、アドレス行のデータを使用してクロールを初期化すると思います。 't 。しかし、研究者たちはプラグインが依然としてクロールをトリガーする可能性があることを発見しました:

結果は非常に単純です。Googlebotはテストでどちらのページにもアクセスしませんでした。

結局のところ、テストに参加した2人は実際には拡張機能を無効にしていませんでした。その結果、Open Site Explorer(Mozbarがインストールされて有効になっている人)とYandex(別の人によるものですが、明確ではありません)からのアクセスが発生しました彼らがインストールして有効にした拡張機能について)。

これは、リンクが使用されると、ブラウザ拡張機能によって侵害される可能性があることを意味します。そして、総当たり攻撃をする必要はありません。

これらのリンクを作成する背後にある目的は何ですか? OP、あなたは何を達成しようとしていますか?そこに行くには他の方法があると確信しています...

4
Thomas

推測/総当たりするのは難しいですが、パスを取得する他の方法が可能かもしれません

たとえば、URLはgoogle、bingなどのサービスによってインデックスに登録されている可能性があります。これにより、ユーザーがgoogleでページを検索したときに「秘密」のURLが表示されます。 robots.txtファイルの構成で解決できますが、インデクサーはそれを無視する可能性があることに注意してください

アプリケーションのリンクが非表示のパスにリダイレクトされる場合がある

さらに、「シークレット」ページまたはWebサーバーにアクセスするユーザーと同じネットワーク内のマシンは、URL、すべての中間プロキシおよびユーザーのISP(またはユーザーが使用している場合はVPN)も表示できます。

最後に、URLはブラウザのキャッシュまたは履歴、あるいはその両方、およびWebサーバーとプロキシのログに保持されます。

2
Mr. E

シークレットGETリクエストを総当たりにすることはできますか?

はい、できます。適切なセキュリティ対策を講じていないあらゆる種類のリクエストと同じくらい。

パスの秘密の部分が非常に長い場合、そのような秘密のページまたは領域を持っていることは安全であり、それを推測またはブルートフォースするのは難しいでしょうか?

いいえ、そのような秘密のページや領域を持つことは安全ではありません。はい、それを推測したり、総当たりすることは困難です。

このアプローチの一般的な問題は何ですか?

POST要求とは異なり、GET要求はWebブラウザーの履歴で簡単に見つけることができます。

2
Gillian

電子メールで送信するOTPワンタイムパスワードは、自動または手動で実装することをお勧めします(そのため、ページにアクセスできるユーザーを決定します)。

手動シナリオでは:
[email protected]からリクエストを受け取ります
[email protected]へのアクセスを許可します
-スクリプトはOTPとのリンクを作成します
-リンクは[email protected]にメールで送信されます
-ユーザー[email protected]がページにアクセスすると、OPTにフラグが設定され、他のユーザーはそのリンクを再利用できません

もちろん、このシステムには、承認された電子メール、OPT、およびフラグフィールドを格納するデータベースが必要です

0
ViDiVe