3

クライアント側がこれらの呼び出しをキャッシュできるため、サーバーの負荷が軽減されるため、URL にパラメーターを指定してアドレス ルーティングと HTTP-Get を使用して Ajax 呼び出しを行うことがどれほど流行に乗っているかは誰もが知っていますが、その境界線はどこにあると思いますか?リソース」と「開示の脆弱性」に対処する適切な方法は? 私はいくつかの例を挙げます -

私が自分の銀行のウェブサイトにいるとしましょう。バックグラウンドでは、私のブラウザは HTTP-Getting to /onlinebanking/AForster/transactions です。もちろん、私は自分の銀行口座のログイン ID を他人に知られてしまうことに非常に神経質なので、常に「記憶する」のチェックを外しています。しかし、私のブラウザが私のログイン ID を含む URL にアクセスしたという事実は、開示の脆弱性を構成しますか?

私がフォーラムに参加していて、通常のユーザーが存在することを知らないはずの制限付きスレッドを読んでいる場合はどうでしょうか。私のブラウザは、/forum/Secret-Board/Im-Going-To-Kill-My-Brother/posts に対して HTTP-Get を実行して、スレッドのコンテンツを取得します。私がその URL に Ajax でアクセスしたという事実は、何らかの形でそのスレッドの存在を弟に明らかにしますか?

などなど。おそらくもっと多くのシナリオを考えることができます。クライアント側で Ajax 呼び出しをキャッシュするメリットが本当に欲しいのですが、これらの場合、これらの URL への Ajaxing は開示の脆弱性と見なされますか?

4

5 に答える 5

0

ですから、質問は私がもっと知りたいと思ういくつかのポイントを提起しますが、少なくとも物事を計画するために最善を尽くします...

ブラウザはパスにプライベート/セキュア情報を含むURLをキャッシュしているため、他の人にプライベート情報への潜在的なウィンドウを残します。影響:

  1. あなたが不在のときに誰かがあなたのコンピュータに近づいたり、おそらくリモートであなたのコンピュータにアクセスしたり、あるいは-適切な予防策がいくつかのレベルで取られていない場合-XSSメソッドを使用してjavascriptを介してキャッシュされたURLを取得する可能性があります。

そして懸念は正当ですが、あなたはすでにそれらを達成するためにあなたが取ることができるステップのいくつかが何であるかを示しました:

  • 複数のウィンドウを開いてはいけません。いくつかはプライベートで、いくつかはそれほどプライベートではありません。プライベートブラウジングにはプライベートブラウザセッションを使用します。私は実際に、ある種の「ダークリスト」、つまり常にシークレットモードにする必要のあるドメインのリストを作成できるFirefoxアドオンのアイデアを思いつきました。そうすれば、銀行のサイトにアクセスしてTwitterにアクセスでき、さまざまなセッションがあることがわかります。

  • クローズするたびにすべての個人データを削除するように(または少なくとも削除を依頼するように)ブラウザを設定します。

  • サーバー側では、責任のあるWebアプリ設計者は、安全なサイトのURLで資格情報や個人データを使用してはなりません。それは滑らかではありません、それは怠惰です。ID番号やセッションIDはそれほど良くないと思います(ポイント2でそれについて説明します)。あなたの銀行は以下を使用する必要があります:/onlinebanking/UserServices/transactionsRESTful URLとして、サーバーレベルでIPに至るまで、各リクエストですべてを確認する必要があります(mod_authと非常に優れた証明書)。人々が「サーバーの負荷を減らす」あるいは「データベースのヒットを減らす」とさえ話すのを聞いて、私は非常に疲れ果てています。このソフトウェアは、大量のリクエストを受信するように明示的に設計されています。6年前に製造された私のHPラップトップは、古い冷蔵庫がサーバーの作業負荷を軽減するように設計されていないように聞こえます。設計が不十分なjsスクリプト(新しいYahoo!メールクライアントを参照)を10分間待つと、刺したくなります。そして、悪用された巨大なサーバーが処理することを期待できるものが他にない場合は、毎回セキュリティを確保する必要があります。

さて、その暴言は終わりました。

  • あなたの兄弟はあなたのキャッシュされたURLを見ることができますか?多分。私のガールフレンドは、履歴をクリアしてもxxxサイトにアクセスしたことを知ることができます(なぜですか?最近閉じたタブに表示されるためです!プライバシーが守られます!)そして、それらはRESTfulnessのためにキャッシュされておらず、キャッシュされていますそれがブラウザが行うことです。したがってiamgoingtokillhimtonight/posts、URLに含まれているサイトにアクセスした後は、自分自身をカバーするのと同じ予防策を講じる必要があります。ポルノサイトにアクセスしたとき、または誕生日プレゼントのアイデアを探しているときです。

私の解釈の一部に:

そうです、URLはキャッシュされており、そのキャッシュを熟読してビジネスに参入したい人にとっては気味が悪いです。しかし、あなたが表現している他の懸念は、彼らがそれを使って何ができるか、つまりクロスブラウザエクスプロイトであるようです。誰かがそのキャッシュされたURLを使用して、実際の銀行情報にアクセスしてあなたを一掃するためのスクリプトを作成できますか?はい。しかし、これを行う方法をすでに知っている場合に得られる利点はわずかです。それは、彼らに一歩を保存してから、鍵をドアにぶら下げたままにしておくようなものです。どういうわけかjs経由でキャッシュを確認でき、安全な銀行のURLを確認できれば、かわいいURLを使用していなくても、銀行のURLを簡単に確認でき、XSSを簡単に記述できます。そして、私があなたのキャッシュを見ることができれば、私はあなたのクッキーを確実に見て、それらを盗むことができます(ウェブ上でのみ、キャッシュよりも価値のあるクッキーがあります)。したがって、AJAX以前の同じルールが適用されます。

  • ユーザーはパスワードを書き留めてはいけません
  • セッションCookieはセッションの終了時に期限切れになる必要があります
  • Webアプリは、ユーザーの要求の整合性と信頼性を確保するために、ホワイトリスト、証明書、およびナンスを使用する必要があります。

XSSの成功が、開発者(私自身を含む)の怠惰(または無知)とユーザーの混乱と素朴さに基づいていることを十分に強調することはできません。最も大きなXSSスコアには、インターネットハッキングの前のソーシャルハッキングが含まれます。フィッシング詐欺または旧友やスペインの囚人からの手紙。この無実のリンクをたどるか、意味のない個人情報を共有するように求められます。あなたの銀行の例でさらに悪化することがわかったのは、このサイトからあなたの名がAlexであり、URLからあなたの姓がForesterであることがわかったということです。これにより、詳細を掘り下げて他の情報を簡単に見つけることができる場合があります。

それで、それの長短、最後に:

RESTfulnessとAJAXは、ブラウザーの履歴やサーバーのセキュリティの悪さほど脅威にはなりません。そのため、ユーザーと開発者の両方に同じルールが適用されます。しかし、そのようなRESTful URLが、これらのプラクティスについては良くなるのではなく悪化していることを指摘していることは完全に正しいです。アドバンテージを使用して実際のハードワークに集中するのではなく、テクノロジーを使用して怠惰になります。

楽しかったです。塩採掘に戻ります。

于 2009-09-30T21:55:27.753 に答える
0

ユーザーのブラウザ、履歴、キャッシュなどが秘密にされていない、または適切に保護されていないという事実に帰着します(これらに権限のないユーザーがアクセスできるシナリオはたくさんあります。質問をしているという事実は、あなたがおそらくそれらを認識しています...)。

したがって、そこにキャッシュされたものはすべて保護されると想定しないでください。また、「機密」情報がそこにキャッシュされることを許可しないでください。「センシティブとは」とあなたは尋ねますか?まあ、他のユーザーに公開したくないものは何でも。銀行口座、秘密のフォーラム、ユーザー名、セッション ID、トランザクションの詳細 - これらのいずれも、クライアントにキャッシュまたは保存することはできません。

多くの場合、開発者はユーザビリティを改善するために AJAX などを急いで使用し、その情報を途中でクライアントに保存することを忘れてしまいます。

于 2009-09-30T21:20:37.873 に答える
0

URL は Web ブラウザーにとって不透明な識別子であるため、人間が判読できるテキストを URL に追加する唯一の目的は、覚えやすくすることです。

銀行は、あなたの名前の代わりに匿名の ID を使用する必要があります。接続は (できれば!) 暗号化されていますが、URL は引き続きブラウザーの履歴に保存され、第三者がアクセスできます。匿名 ID、または一時的なセッションごとの ID の方が安全です。

フォーラムの例には、「通常のユーザーが存在することを知らない制限付きスレッド」という奇妙なフレーズが含まれています。通常のユーザーがスレッドの存在を知っているかどうかは本当に重要ですか? 問題は、スレッドの件名が URL で公開されることです。これは脆弱性です。URL はおそらく のようなものになるはず/forum/thread/12345/です。

正直なところ、これは、CRUD、AJAX、または質問に投げかけた他の流行語とは何の関係もありません。問題は、機密情報を平文で公開することが許容されるかどうかであり、答えは「いいえ」です。

于 2009-09-30T21:22:04.357 に答える
0

このような開示を避ける最も簡単な方法は、文字列の代わりに ID 番号を使用することです。

そのようなことを明らかに/forum/Board-214/Thread-5625/postsするものは何もありません。


私は必ずしも問題に同意しているわけではなく、回避策を提供しているだけであることに注意してください。

悪意のあるユーザーが AJAX 要求 URL を取得できるが、応答本文を取得できない状況にはどのようなものがありますか?

于 2009-09-30T21:14:18.400 に答える
0

素晴らしい会話、そしてすべての非常に興味深い反応!申し訳ありませんが、まとめて返信する必要がありますが、すぐに仕事をやめようとしていたため、どこかに OpenID プロバイダーがあるかどうかを確認する時間がありませんでした。

私の例はでっち上げでしたが、今日、実際にこのシナリオにいることに気づきました。私のプロジェクトは設計から外れており、最初に構築されるのは HTTP/JSON Web サービスです。昨日、私はすべての UI 概念をくまなく調べ、Web サービスによってデータを提供する必要があるすべてのポイントのリストを作成しました。次に、これらすべてのアクションを一貫した URL スキームに組み込みたいと考えていたときに、GET リクエストに少し機密性の高い情報を入れたいと思っていました。私の最初の投稿は、このコンテキストで使用される RESTful Web サービス (特に CRUD エンドポイント) によって引き起こされる潜在的なセキュリティの問題についてのコメントであり、質問ではありませんでした。そのような観点からこのテーマについて誰かが話しているのを聞いたことがなかったので、皆さんの考えに興味がありました.

私の質問に対する最も有益な回答は、iframe ベースの Ajax が実際にリクエスト URL を履歴に記録することを指摘した John Millikin からのものだと思います。これを知って驚きました。XHR リクエストはブラウザのキャッシュにしか存在しないと確信しています。キャッシュではレスポンスも利用可能であり、その時点でさらに大きな問題が発生します。XSS 攻撃への言及は、もう 1 つの興味深い点でした。ブラウザの履歴を公開したり、特定の URL のキャッシュを取得したりする方法を見つけた事例がかなりあります。誰かが私の銀行口座 ID が "AForster" であることを知っていて、別のドメインのコンテキストから /onlinebanking/AForster/transactions のキャッシュ バージョンを取得する方法を見つけた場合、かなり多くの情報を取得できます。

奇妙なことに、この特定の機密データは実際にはまったく機密ではなく、企業のイントラネットであり、その下に TLS があるため、注意を怠って GET 経由で機密データを渡すことになるでしょう。自己文書化、人間が読める、覚えやすい URL については、多くのことが言えます。ただし、これらのリクエストが 1) 当社の Web サーバー、2) Websense、および 3) VPN インフラストラクチャによってログに記録されることはわかっています。そして、私がこれまでに所有したすべての家庭用ルーターには、URL をログに記録できるペアレンタル コントロールが備わっています。ウェブサーバーのリクエスト ログ。私の特定の状況では許容できるトレードオフですが、別の状況では、かなりの理由が懸念される可能性があると思います.

于 2009-10-01T02:42:48.550 に答える