トークンパラメータを含むhttpsURL:安全性はどれくらいですか?


89

当サイトでは、ユーザーの個人情報(フォームから提供)に基づいたシミュレーションをユーザーに提供しています。ログイン/パスワードアカウントの作成を強制することなく、後でシミュレーション結果に戻ることができるようにしたいと思います。

私たちは、彼らが結果を取り戻すことができるリンクを含む電子メールを彼らに送ることを考えました。ただし、個人データが危険にさらされているため、当然、このURLを保護する必要があります。

そのため、URLでトークン(文字と数字の40文字の組み合わせ、またはMD5ハッシュなど)を渡し、SSLを使用する予定です。

最後に、次のようなメールが届きます。

こんにちは、https://www.example.com/load_simulation?token = uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXnで
結果を取得して ください

あなたはそれについてどう思いますか?それは十分に安全ですか?トークンの生成について何をアドバイスしますか?httpsリクエストでURLパラメータを渡すのはどうですか?


回答:


97

SSLは、転送中のクエリパラメータを保護します。ただし、電子メール自体は安全ではなく、電子メールは宛先に到達する前に任意の数のサーバーに沿ってバウンスする可能性があります。

また、Webサーバーによっては、完全なURLがログファイルに記録される場合があります。データの機密性によっては、IT担当者がすべてのトークンにアクセスできないようにする場合があります。

さらに、クエリ文字列を含むURLがユーザーの履歴に保存され、同じマシンの他のユーザーがURLにアクセスできるようになります。

最後に、これを非常に安全でないものにしているのは、URLが、サードパーティのリソースを含むすべてのリソースに対するすべてのリクエストのRefererヘッダーで送信されることです。したがって、たとえばGoogle Analyticsを使用している場合は、URLトークンをGoogleに送信します。

私の意見では、これは悪い考えです。


1
HTTPリファラーの問題については考えていませんでしたが、URLリンクが結果ページにリダイレクトされ、適切なページではありません(Googleアナリティクスやその他のサードパーティのスクリプトはありません)。
flackou 2009年

5
ほとんどのブラウザは、HTTPSからHTTPに移行するときにリファラーを削除しませんか?
ケビンマーク

2
これは、ユーザーアクティベーション(またはパスワードリセット)リンクに似ていますか?では、そのケースはどのように処理する必要がありますか?多くのウェブサイトがリセットURLをメールに送信します。POSTはクリック可能である必要があるため、オプションではありません。ありがとうございました。
ピンクパンサー2017

3
それで、解決策は何ですか?
RT

1
URL内のトークンがAPIリクエストに使用されるトークンと同じでなく、1時間しか続かない場合、どのような害がありますか?
user1709076

13

そのためにクッキーを使います。ワークフローは次のようになります。

  1. ユーザーが初めてサイトにアクセスします。
  2. サイトがCookieを設定する
  3. ユーザーがデータを入力します。データは、Cookieに保存されているキーを使用してDBに保存されます。
  4. ユーザーが離れるときは、https:リンクを記載したメールを送信します
  5. ユーザーが戻ってくると、サイトはCookieを検出し、ユーザーに古いデータを提示できます。

ここで、ユーザーは別のマシンで別のブラウザーを使用したいと考えています。この場合、「転送」ボタンを提供します。ユーザーがこのボタンをクリックすると、「トークン」を取得します。彼女は別のコンピューターでこのトークンを使用してCookieをリセットできます。このようにして、ユーザーはトークンを転送する安全性を決定します。


4

SSLは転送中のデータの内容を保護しますが、URLについてはよくわかりません。

とにかく、攻撃者がそのURLトークンを再利用するのを軽減する1つの方法は、各トークンが1回だけ使用できるようにすることです。正当なユーザーがリンクを引き続き使用できるようにCookieを設定することもできますが、最初のアクセス後は、Cookieを持っている人に対してのみ機能します。

ユーザーの電子メールが危険にさらされ、攻撃者が最初にリンクを取得した場合、まあ、あなたはうんざりしています。しかし、ユーザーにはさらに大きな問題もあります。


11
SSL接続は、URLが送信される前に保護されます。
デビッド

1

電子メールは本質的に安全ではありません。誰かがそのリンクをクリックしてデータにアクセスできる場合、あなたは実際にはそれを保護していません。


正確ですが、多くのサイトはそれを気にせず、ログイン/パスワードをメールで送信します。しかし、それはそれらを模倣する理由ではありません...
Flackou 2009年

それらを模倣する理由はありませんが、通常、最初にログインした後にパスワードを変更するように指示されます。
JasonPunyon

1

トークンはSSLを介して渡されるときに安全です。あなたが抱える問題は、URLを表示できることで、人々(意図されていない人々)が利用できることです。

SSNのような個人情報の場合、メールでURLを送信することはないと思います。むしろ、サイトのユーザー名とパスワードを作成してもらいたいと思います。あなたと彼らにとって危機に瀕しているその種の情報で電子メールを危険にさらすのは簡単すぎます。誰かのアカウントが侵害された場合、それは実際にそのせいであるという疑問になります。厳密にCYAの観点から見ると、安全性が高いほど優れています。


1
その通りです。たとえば、URLはブラウザの履歴に残ります
Flackou 2009年

0

深刻なプライバシーの問題がある状況では、それほど安全だとは思いません。(おそらくクリアテキストの)電子メールでURLを送信しているという事実は、はるかに弱いリンクです。その後、トークンに対するブルートフォース攻撃のリスクが発生します。これは(実際の認証メカニズムの構造が欠如しているため)、適切に構築されたユーザー名とパスワードの設定よりも脆弱である可能性があります。

ちなみに、httpsリクエストのパラメータにはまったく問題はありません。


あなたはブルートフォース攻撃のリスクについて正しいです。ボットがこの種の攻撃を防ぐ方法がわかりません。IPを「主張する」ことを禁止することは十分な保護ではありません。このテーマについてアイデアはありますか?
flackou 2009年

実際、私たちが話している種類のキースペースでは、if(this_ip_number_has_requested_an_invalid_token_today())sleep(5);を配置します。load_simulationスクリプトでは、完全に十分な保護になります。(レート制限は、優れた認証メカニズムの機能の1つです。)
カオス

ご回答有難うございます。しかし、同じボットが異なるIPを簡単に取得できるため、IPレート制限が不十分になると思いました。私が間違っている?
flackou 2009年

それらを取得するのは、IPごとに1回の遅延のない試行です。IPアドレス空間はそれほど簡単には利用できないので、それは役に立ちます。
カオス

0

そのままでは悪い考えです。簡単な使い方でセキュリティを怖がらせます。前に述べたように、SSLはサーバーとクライアントブラウザ間の情報転送のみを保護し、中間者攻撃のみを防止します。電子メールは非常に危険で安全ではありません。

情報にアクセスするためのユーザー名とパスワードの認証が最適です。

私は多かれ少なかれクッキーのアイデアが好きです。Cookie情報も暗号化する必要があります。また、攻撃の可能性を制限するために、ソルトとキーフレーズに加えて$ _SERVER ['HTTP_USER_AGENT']を使用してトークンを生成する必要があります。検証に使用するために、クライアントに関する機密性の低い情報をCookieにできるだけ多く保存します。

キーフレーズは簡単に使用できるようにCookieに保存できますが、Cookieも盗まれる可能性があることに注意してください=(。

クライアントが提供したキーフレーズを入力できるようにすることをお勧めします。キーフレーズは、データとともにデータベースにも保存されます。

または、ユーザーが$ _SERVER ['HTTP_USER_AGENT']パラメータが異なる別のマシンを使用している場合や、単にCookieを見逃している場合に、キーを使用できます。そのため、Cookieを転送または設定できます。

また、機密データがデータベースで暗号化されていることを確認してください。あなたは、決して知らない ;)


-1

ハッカーがデータベースにアクセスした場合、多くの個人情報を自由に提供できることをご存知ですか?

その後、これはアイデアとして悪くはないと思います。MD5またはSHA1はハッシュに対してあまり安全ではないため、使用しません。それらは非常に簡単に「復号化」できます(暗号化ではないことはわかっています)。

それ以外の場合は、電子メールのようなパスワードでは送信されない2番目の情報を使用する可能性があります。理由は非常に単純です。誰かがユーザーの電子メールにアクセスできる場合(セッションを強制終了しない場合はhotmailを使用すると非常に簡単です)、ユーザーが送信したすべての情報にアクセスできます。

HTTPSは、サイトからエンドユーザーに送信されるデータを保護および暗号化することに注意してください。他に何もありません、それを安全なトンネルとしてとってください。これ以上のことはありません。


ソルトされたSHA1ハッシュは、どのような意味でどの程度正確に復号化されますか?
Eli

「ハッカーがデータベースにアクセスした場合、多くの個人情報を自由に提供できることをご存知ですか?」はい、でもそれはすべてのウェブサイトにとって問題ではありませんか?
flackou 2009年

@Flackouはい、しかし、paypalのデータベースにアクセスすると、明確に保存されたクレジットカード情報が見つかりません。すべてが暗号化されています。@Eli:theregister.co.uk/2005/02/17/sha1_hashing_broken
エリック

-1

私があなたの考えを理解していることから、理論的には誰かがランダムな40文字の文字列またはMD5ハッシュを入力して、他の誰かの詳細を取得することができます。これはほとんどあり得ないかもしれませんが、一度だけ発生する必要があります。

より良い解決策は、ユーザーにトークンを送信してから、名前、郵便番号、社会保障番号、またはこれらの組み合わせなどの詳細の一部を入力するようにユーザーに依頼することです。


5
SSN?真剣ですか?とにかく、40文字のランダムな文字列がいくつあるかを計算することをお勧めします。それは単に「非常にありそうもない」以上のものです
Eli

そうです、おそらくメールのようにURLに別のパラメータを追加する必要があります(a..z + A..Z + 0..9 = 62文字で、62 ^ 40がかなり大きい場合でも)。
flackou 2009年

みんな、62 ^ 40は宇宙の原子の数よりかなり多いです。それは文字通り推測できません。
Eli

1
これらの数字の大きさを把握できない人が多いことに驚いています。1秒間に100万トークンを推測している場合、ヒットする前に太陽が燃え尽きる可能性がはるかに高くなります
Eli

4
リチャード、あなたは通常バースデーパラドックスと呼ばれるものを指摘しているようです...重要なのは可能な組み合わせの数だけではなく、それらの数が使用されていることです。さて、この場合、チャンスが大きくなる前に、62 ^ 40の組み合わせのうち約2 ^ 119を使用する必要があります。
エリクソン2009年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.