web-dev-qa-db-ja.com

トークンパラメーターを使用したhttps URL:どのくらい安全ですか?

このサイトでは、ユーザーに個人情報に基づいたシミュレーションを提供します(フォームを介して提供されます)。後でシミュレーション結果を取得できるようにしたいのですが、ログイン/パスワードアカウントの作成を強制することはありません。

リンクを記載したメールを送信して、結果を取得することを考えました。しかし、当然、プライベートURLが危険にさらされているため、このURLを保護する必要があります。

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

最後に、彼らはそのようなメールを受け取ります:

こんにちは、
https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn で結果を取り戻す

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

76
Flackou

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

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

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

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

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

87
JoshBerke

そのためにCookieを使用します。ワークフローは次のようになります。

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

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

12
Aaron Digulla

SSLは転送中のデータのコンテンツを保護しますが、URLについてはわかりません。

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

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

4
Eli

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

1
Jason Punyon

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

SSNのような個人情報の場合、メールでURLを送信するとは思わない。サイトのユーザー名とパスワードを作成してもらいたいです。あなたにとっても彼らにとっても、そのような種類の情報を使って電子メールを危険にさらすのは簡単すぎます。誰かのアカウントが脅かされている場合、それは実際に問題である質問になります。セキュリティが高いほど、厳密なCYAの観点からは優れています。

1
kemiller2002

私は、深刻なプライバシー問題がある状況に十分に安全であるとは考えていません。 URLを(おそらくクリアテキストの)電子メールで送信しているという事実は、間違いなく最も弱いリンクです。その後、トークンに対するブルートフォース攻撃のリスクがあります。これは(実際の認証メカニズムの構造を欠いている)よく構成されたユーザー名とパスワードのセットアップよりも脆弱である可能性があります。

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

0
chaos

現状では、それは悪い考えです。簡単に使用できるため、セキュリティが脅かされます。前に述べたように、SSLはサーバーとクライアントのブラウザー間の情報の転送のみを保護し、仲介者の攻撃を防ぐだけです。メールは非常に危険で安全ではありません。

最善の方法は、情報にアクセスするためのユーザー名とパスワードの認証です。

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

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

クライアントが提供したキーフレーズをクライアントに入力させると、データもデータベースに保存されます。

または、$ _ SERVER ['HTTP_USER_AGENT']パラメーターが異なる別のマシンを使用するか、単にCookieを紛失した場合に、キーを使用できます。そのため、Cookieを転送または設定できます。

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

0