5

レッスン/チュートリアルを完了するためにユーザーに電子メール通知を送信する Web アプリを開発しています。そのメールのリンクからユーザーを自動的にログインさせる機能を追加しました。この機能は、インターネット上のいくつかのサービスに追加されていますが、最も注目すべきは OkCupid です。

テーブルをセットアップした方法は次のとおりです。

+----+-------------+-------------------+-----------+--------------+----------------------+
| id | key (22)    |  secret (40)      |  user_id  |  action      |  expires             |
+----+-------------+-------------------+-----------+--------------+----------------------+
|  1 | IbQlQW8Dn...|  hdC4dXQJUPA0...  |  1        |  lesson/14   |  2013-06-21 16:28:55 |
+----+-------------+-------------------+-----------+--------------+----------------------+

ユーザーが電子メールを介して次のようなリンクにアクセスすると、次のよう keyなり ますsecret

サーバーはまず、表の日付に基づいて URL の有効期限が切れていないことを確認します。有効期限が切れていない場合、ユーザーは を使用して自動的にログインしuser_id、列に指定された URL にリダイレクトされactionます。セキュリティを強化するためだけに(混乱を防ぐため)、URLに2つの個別の値(key& )を使用しました。secret

サイト (ビデオ レッスン) の性質上、セキュリティは大きな懸念事項ではありませんが、考慮すべきベスト プラクティスを知りたいです。

  • リンクを使用できる回数を制限する必要がありますか?
  • 現在、メールが送信されてから 60 時間 (3 日) でリンクの有効期限が切れます。これは下げるべきでしょうか?
  • 不正アクセスの明らかな 2 つのリスクには、誰かが電子メールを転送すること、または誰かがユーザーの電子メール アカウントにアクセスすることが含まれます。他に考慮すべきことはありますか?

皆さんの洞察に感謝します。これを StackExchange の別のセクションに移動する必要がある場合は、お知らせください。過去にここで他のベストプラクティスの投稿を見たことがあることは知っています。

4

3 に答える 3

7

自動ログイン リンクを送信するリスクは、電子メールでパスワード リセット リンクを送信するリスクとかなり似ており、多くのサイトがそうしています。

これはあなたがしなければならない判断の呼びかけです。許容できるリスクと許容できないリスクを決定するために人々が使用する共有決定マトリックスはありません。ここで行っているのはビジネス上の決定であり、セキュリティ リスクと使いやすさ (より多くのユーザーとより多くのビジネスにつながる可能性があります) を比較検討しています。

「この機能を誤用した場合に起こりうる、サイトの可用性、ビジネスの評判、およびユーザー エクスペリエンスの点で、絶対に最悪なことは何ですか?」という質問をする必要があります。.

その他の注意事項:

  1. 共有 Wi-Fi ネットワークからあなたの自動ログイン リンクを抜き取る人
  2. サーバーとクライアント間のプロキシのログに記録される自動ログイン リンク

リンクを使い捨てにするか、有効期限を短くすることをお勧めします。また、リンクが過度に使用されている場合に警告する監視も行う必要があります。

また、シークレットを取得して DB にクエリを実行するときに、SQL インジェクションに対して脆弱でないことを確認する必要があります。

于 2013-07-03T16:15:50.923 に答える
2

大事なものは全部持っていると思います。@u2702 が言ったことすべてに同意し、追加するだけです…</p>

  • 未処理のログイン リンクを無効にする方法をユーザーに提供したり、電子メール アドレスやパスワードを変更したときに自動的に無効にしたりすることができます。

  • サイトが大量の電子メールを送信する場合は、データベースをスキップして、署名とともに URL にユーザー、ターゲット、および有効期限をエンコードできます。Amazon は、S3 ( http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html ) のオブジェクトへのアクセスを一時的に許可するためにこれをサポートし、他のサイトは CSRF トークンに使用します。擬似コード:

    params = encode_qs(userid=1, target="lesson/14", expires=…)
    url = "http://example.com/l/?" + params + "&" +
          encode_qs(sig=hmac_sha1(secret, params))
    

    (リクエストに署名するために使用するシークレットは、公開されないため、電子メールごとに一意である必要はありません。) これは、負荷を気にしない場合は、ランダムなキーを生成することに勝るものはありません。

  • 有効期限が切れる前にリンクを使用できる回数を制限しても、何も得られるとは思いません (OkCupid はそうではありません。最新の電子メールを保持し、それを複数回使用する人もいます)。

  • 別々の「キー」と「シークレット」を常に一緒に使用すると、セキュリティがさらに強化されますか?

于 2013-07-15T20:54:43.377 に答える