1

新しく作成したリンクを自動生成したい

mywebappがユーザーの電子メールに送信するユーザー。いつ

ユーザーがリンクをクリックすると、ユーザーを次のように更新する必要があります

「アクティブ化」。

だから私はいくつかの質問があります

私がこれまで読んだことから、私の論理は正しいです。

  1. ユーザーがフォームに入力してEnterキーを押します

2.私のWebサービスがデータを処理してアカウントを作成します......

これが、入力したパスワードを一意のソルトでハッシュしてデータベースに保存する部分です。

だから私は次のようなテーブルを持っています

user_ID   username         password                 active 

1           taniamm20     12346645556665566666       0

たとえば、このハッシュ化されたパスワードを確認リンクで使用できますか?

http://localhost:9092/localbusscat/services/localbusscat/UpdateDB?choID=12346645556665566666       

それは良い習慣ですか?

または、この時点では、ユーザーのパスワードを保存せず、user_idを保存し、そのユーザーのjava.UUIIDを使用して長い一意のキーを生成し、テーブルに保存して、この一意のキーを検証に使用する必要があります。

UpdateDBServiceは次のようになります。

public  String  UpdateDB(int choID ) throws ClassNotFoundException 
        {

            String strDelReturn = "UPDATE_FAIL";

            Class.forName("org.postgresql.Driver");
            try 
            {
                conn = DriverManager.getConnection("....");
            }

            catch (SQLException ex) 
            {

                ex.printStackTrace();
            }


            PreparedStatement pstmt = null;
            String selectQuery = "update user_table set active=active+1 WHERE password="+ choID ;

            try {

                pstmt = conn.prepareStatement(selectQuery);
                int rowss = pstmt.executeUpdate();
                if (rowss != 0) 
                    strDelReturn = "UPDATE_OK";

            } 
            catch (Exception ex) 
            {

            }
            return strDelReturn;
}
4

2 に答える 2

3

私の提案では、と呼ばれる2番目のテーブルを使用しますpending

これは基本的に、構造に応じて、usersテーブルの「拡張」またはメインデータのコピーです。

このテーブルは、最も純粋な形式では、次のようになります。

UID (int), ActCode (Varchar[x]), ValidUntil (int)

UIDとActCodeはどちらも一意です。つまり、一度にUIDごとに発行できるActCodeは1つだけであり、各ActCodeは1回しか関連付けることができません。ValidUntilには、UNIX_TIMESTAMP() + x seconds有効期間をどのように設定する場合でも、の戻り値が含まれます。

この構造は、実際のユーザーテーブルがid, userdata, activated列として持っていることを示しています。

リンクがx秒間使用されない場合、リンクは無効になり(UNIX_TIMESTAMP() > ValidUntil)、新しいアクティベーションリンクが生成される可能性がありますが、古いリンクは削除されます。

または、(アクティベーション関連のリクエストごとに)期限切れのアクティベーションをフェッチして、それに関連付けられているユーザーデータを削除することもできます。

間隔内にリンクがクリックされた場合は、アクティベーションコードを削除し、ユーザーフラグを更新します。

別のオプションは、拡張ユーザーテーブルです。

ActCode, ValidUntil, Userdata

このように、UserTableは完全に選択から除外されUserData、ActCodeがまだ有効なときに使用された場合にのみ挿入します。これにより、AutoIncrementがアクティブ化されていないアカウントから保護さActivatedれ、ユーザーテーブルにフィールドも必要ありません...ユーザーテーブルに入るとすぐにアクティブ化されるためです。

于 2013-03-17T08:21:48.800 に答える
1

アクティベーションは認証とは別のものであり、通常、ユーザーがアクセスできる有効な電子メールアドレス(または連絡先の詳細)を入力していることを確認するために使用されます。

ユーザーをアクティブ化し、パスワードではなくそのコードを使用してリンクを電子メールで送信するには、別の一意のコードを生成する必要があります。

ここで私は間違っているかもしれませんが、パスワードをハッシュすると、電子メールで転送しても問題ないという印象を受けているようです。最良のシナリオでは、攻撃者にブルートフォース攻撃を与えることはありません。

アクティベーション後、ユーザーに資格情報を使用してログインするように依頼します。

于 2013-03-17T14:02:33.180 に答える