8

これは、ここでの以前の投稿によって引き起こされた、より焦点を絞った質問です。ユーザーのメールアドレスにアクセスできることを証明して、ユーザーのメールアドレスを認証する必要があります。開発者フォーラムまたはユーザーグループに参加するときに表示されると予想される一般的な電子メール認証を以下にコピーしました。登録プロセスの一環として、メールアドレスを入力すると、何かをクリックしてメールアドレスを確認するように求めるメールが届きます。

ユーザーがメール内のリンクをクリックしたときに何が起こるかをコーディングする必要があります。だから私の質問は-どうすればそれを行うことができますか?

どのような技術が関係していますか?誰かが私に手順を教えてもらえますか?私はbashのようなJavaまたはLinuxスクリプト言語を好みます。さらに良いことに、この目的のために開発されたソフトウェアでLinuxサーバーにインストールし、それを統合してデータベースと通信できるものはありますか?これは実際にはどのように行われますか?それがすでに利用可能であるならば、私は何かを再発明したくありません。

To confirm your email address of: 

youremail@yourdomain.net 

please send a short reply to this address: 

users-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.com 

Usually, this happens when you just hit the "reply" button. 
If this does not work, simply copy the address and paste it into 
the "To:" field of a new message. 

or click here: 
mailto:users-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.com  

This confirmation serves two purposes. First, it verifies that I am able 
to get mail through to you. Second, it protects you in case someone 
forges a subscription request in your name. 

Some mail programs are broken and cannot handle long addresses. If you 
cannot reply to this request, instead send a message to 
<users-request@listdomain.com> and put the 
entire address listed above into the "Subject:" line. 
4

3 に答える 3

7

ユーザーデータベースには、ステージングユーザーテーブルが必要です(またはメインユーザーテーブルに、ユーザーがアクティブかどうかを示す列を追加し、デフォルトでインジケーターを「いいえ」に設定します)。ユーザーが最初に登録するときに、ユーザーの情報の一部から一意のハッシュコードを生成します。たとえば、ユーザーの主キーと名前(または復号化によって取得できる他のユーザーの変数のセット)でmd5を使用します。このハッシュコードを、ユーザーに送信するリンクのクエリ文字列パラメーターにします。最後に、ユーザーがリンクをクリックすると、クエリ文字列からハッシュコードを取得し、それを復号化して、復号化された値をデータベースのユーザー行と照合します。一致するものが見つかった場合は、「アクティブ」インジケーターをtrueに設定し、プレストします。または、ステージングテーブルを使用した場合は、ユーザーレコードを「アクティブユーザー」に移動します

于 2012-05-11T04:50:29.377 に答える
3

誰かの電子メールに固有の欠陥があることを確認するために一意の電子メールに返信すると、偽造される可能性があります(ヘッダーとIPをチェックしない限り)。たとえば、私はあなたのサイトにアクセスして登録します。で返信するように言ってくださいusers-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.commail()スパムボットを使った機能を使って返信しています。ゲームオーバー。目的を破った。

代わりに、私の登録IDで確認リンクを送ってください。何かのようなものexample.com/verify?userid=1&hash=67gk65fs6714fgsHguj

ユーザーテーブル:

id|username|status|onetimehash
--+--------+------+-------------------------
 1|testuser|    0 |67gk65fs6714fgsHguj

次に、検証呼び出しでユーザーIDとハッシュを確認します。それらがデータベース内の値と一致する場合は、ユーザーを安全に確認できます。ハッシュを生成するために、タイムスタンプや乱数などのソルトと混合されたユーザー名のmd5またはsha1値を​​取得できます。

更新 前者のソリューションを使用する場合、つまり、電子メールを検証するためにユーザーの応答をキャプチャする場合は、独自のメールサーバーをセットアップする必要があります。Fetchmailが役立つ場合があります。プログラムでメールヘッダーを読み、<to>,<from> or <subject>フィールドから必要な情報を抽出する必要があります。userid=1496854427およびhash=ckdpbmhncdlkjadkajfpeccのように。このプロセスでは正規表現が必要になる場合があります。これらの値を取得したら、非常に簡単です。データベースの値と照合してください。

結論として、前者の方法は面倒なだけでなく、後者よりも脆弱です。ほとんどのWebアプリは、よりクリーンで賢明な2番目のソリューションを使用しています。

于 2012-05-11T04:55:48.497 に答える
2

BalusCによって与えられた最良の答えを持っている1つのリンクを知っていました
ここにリンクがあります:より良い答え
私はそれを私のプロジェクトに実装しました。これが他の人に役立つことを願っています。

于 2012-11-12T11:19:58.693 に答える