2

Symfony2 を使用して構築された Web アプリケーションがあり、いくつかの項目が他のユーザーと共有されています。アイテムが共有されると、ユーザーはそのアイテムへのリンクを受け取ります。リンクを受け取ったユーザーがメールをクリックすると、サイトへの認証が自動的に行われるようにしたいと考えています。これまでのところ、私がやったことは次のとおりです。

  1. 共有リンクで一意のトークンを生成し、リンクに追加します
  2. リンクを共有したユーザーがリンクをクリックすると、一意のトークンがチェックされ、それぞれのユーザーが認証されます。

ただし、この方法には欠点があります。他のユーザーが同じリンクをコピーしてブラウザに貼り付けた場合、または元の受信者がメールを他の人に転送した場合、そのユーザーはリンクの元の受信者として認証されます。これらの欠陥を乗り越えるためのアプローチは何ですか? 私が実際に欲しいのは:

  1. リンクは、電子メール内からクリックされた場合にのみユーザーを認証する必要があり、直接アクセスは許可されません。
  2. ユーザーは、リンクが最初に送信された電子メールからリンクをクリックした場合にのみ認証されます。

要件は多少似ていますが、まったく同じではないいくつかの質問を読みました。また、それらへの対応は、それは不可能であるという結論に至りました。本当か ?

4

1 に答える 1

4

残念ながら、この状況でできることはこれ以上ありません。

リファラーをチェックすることもできますが、ユーザー Cthulhu が指摘したように、そのようなチェックは信頼性が低く、エラーが発生しやすくなります。

あなたはできる:

  1. 問題のトークンがユーザー アカウントに固有のものであることを確認してください。つまり、2 人のユーザーが同じトークンを持つことはできません。
  2. ユーザー ID をリンクに追加して、特定のユーザー アカウントに対してトークンを検証できるようにします (データベース内のすべてのトークンに対してブランケット検索を行うのではなく)。
  3. トークンに有効期限を追加して、1 か月後に誰かがトークンをクリックすると無効になるようにします。
  4. リンクをクリックしてメールアドレス/アカウントを確認したら、すぐにトークンを無効にします。これにより、トークンを再利用できなくなります。
于 2012-12-08T11:53:22.003 に答える