このサイトでは、ユーザーに個人情報に基づいたシミュレーションを提供します(フォームを介して提供されます)。後でシミュレーション結果を取得できるようにしたいのですが、ログイン/パスワードアカウントの作成を強制することはありません。
リンクを記載したメールを送信して、結果を取得することを考えました。しかし、当然、プライベートURLが危険にさらされているため、このURLを保護する必要があります。
そのため、URLでトークン(40文字の文字と数字の組み合わせ、またはMD5ハッシュなど)を渡し、SSLを使用する予定です。
最後に、彼らはそのようなメールを受け取ります:
こんにちは、
https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn で結果を取り戻す
あなたはそれについてどう思いますか?十分に安全ですか?トークン生成のために何をアドバイスしますか? httpsリクエストでURLパラメータを渡すことはどうですか?
SSLは、送信中のクエリパラメータを保護します。ただし、電子メール自体は安全ではなく、電子メールは宛先に到達する前に任意の数のサーバーに沿ってバウンスする可能性があります。
また、Webサーバーによっては、完全なURLがログファイルに記録される場合があります。データの機密性によっては、IT担当者にすべてのトークンへのアクセスを望まない場合があります。
さらに、クエリ文字列を含むURLはユーザーの履歴に保存され、同じマシンの他のユーザーがURLにアクセスできるようになります。
最後に、これが非常に安全でないのは、URLが、任意のリソース、さらにはサードパーティのリソースに対するすべてのリクエストのRefererヘッダーで送信されることです。たとえば、Googleアナリティクスを使用している場合は、URLトークンをすべてGoogleに送信します。
私の意見では、これは悪い考えです。
そのためにCookieを使用します。ワークフローは次のようになります。
今、ユーザーは別のマシンで別のブラウザーを使用したいと考えています。この場合、「転送」ボタンを提供します。ユーザーがこのボタンをクリックすると、「トークン」が取得されます。彼女は別のコンピューターでこのトークンを使用して、Cookieをリセットできます。このようにして、ユーザーはトークンをどの程度安全に転送したいかを決定します。
SSLは転送中のデータのコンテンツを保護しますが、URLについてはわかりません。
とにかく、そのURLトークンを再利用する攻撃者を軽減する1つの方法は、各トークンが1回しか使用できないようにすることです。正当なユーザーが引き続きリンクを使用できるようにCookieを設定することもできますが、最初のアクセス後はCookieを持っているユーザーに対してのみ機能します。
ユーザーの電子メールが危険にさらされ、攻撃者が最初にリンクを取得した場合、あなたはうんざりしています。しかし、ユーザーには大きな問題もあります。
電子メールは本質的に安全ではありません。誰かがそのリンクをクリックしてデータにアクセスできる場合、あなたは本当にそれを保護していません。
SSLを介して渡されるトークンは安全です。あなたが抱える問題は、URLを見ることができることで、人々(それが意図されていない人)にとって利用可能であるということです。
SSNのような個人情報の場合、メールでURLを送信するとは思わない。サイトのユーザー名とパスワードを作成してもらいたいです。あなたにとっても彼らにとっても、そのような種類の情報を使って電子メールを危険にさらすのは簡単すぎます。誰かのアカウントが脅かされている場合、それは実際に問題である質問になります。セキュリティが高いほど、厳密なCYAの観点からは優れています。
私は、深刻なプライバシー問題がある状況に十分に安全であるとは考えていません。 URLを(おそらくクリアテキストの)電子メールで送信しているという事実は、間違いなく最も弱いリンクです。その後、トークンに対するブルートフォース攻撃のリスクがあります。これは(実際の認証メカニズムの構造を欠いている)よく構成されたユーザー名とパスワードのセットアップよりも脆弱である可能性があります。
ちなみに、httpsリクエストのパラメーターにはまったく問題はありません。
現状では、それは悪い考えです。簡単に使用できるため、セキュリティが脅かされます。前に述べたように、SSLはサーバーとクライアントのブラウザー間の情報の転送のみを保護し、仲介者の攻撃を防ぐだけです。メールは非常に危険で安全ではありません。
最善の方法は、情報にアクセスするためのユーザー名とパスワードの認証です。
クッキーのアイデアはだいたい好きです。 Cookie情報も暗号化する必要があります。また、ソルトとキーフレーズに加えて$ _SERVER ['HTTP_USER_AGENT']を含むトークンを生成して、攻撃の可能性を制限する必要があります。検証で使用するために、クライアントに関する機密情報をできるだけ多くクッキーに保存します。
キーフレーズは、簡単に使用できるようにCookieに保存できますが、Cookieも盗まれることがあることに注意してください=(。
クライアントが提供したキーフレーズをクライアントに入力させると、データもデータベースに保存されます。
または、$ _ SERVER ['HTTP_USER_AGENT']パラメーターが異なる別のマシンを使用するか、単にCookieを紛失した場合に、キーを使用できます。そのため、Cookieを転送または設定できます。
また、機密データがデータベースで暗号化されていることを確認してください。あなたは、決して知らない ;)