2013-03-17 4 views
1

새로 생성 된신규 등록 사용자에 대한 자동 생성 링크

사용자에게 mywebapp가 사용자의 전자 메일로 보낼 자동 생성 링크를 만들려고합니다.

사용자가 링크를 클릭하면 내가

로 사용자를 업데이트해야합니다 '활성화'.

그래서 나는 몇 가지 질문을 가지고 나는 내가 지금까지 읽은에서

내 논리가 맞다면 이해합니다.

  1. 사용자는

    그래서 여기 내가 해시 부분입니다 ......

2.My 웹 서비스 프로세스 데이터를 입력하고 계정을 만들 형태를 눌러 채 웁니다 고유 한 소금으로 입력 한 암호를 데이터베이스에 저장하십시오.

는 그래서 난

user_ID username   password     active 

1   taniamm20  12346645556665566666  0 

내가

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

는 것이 좋습니다 예를

에 대한 확인 링크이 해시 암호를 사용하여 같은 테이블이 있습니까?

또는이 시점에서 사용자의 암호를 저장하지 말고 user_id를 저장하고 해당 사용자의 java.UUIID를 사용하여 긴 고유 키를 생성하고 테이블에 저장 한 다음 확인을 위해이 고유 키를 사용해야합니다.

내가

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; 
} 
+2

나는 임의의 영숫자 문자열을 만들고 유효성 검사 제한 시간 등과 함께 '임시 데이터베이스'에 저장해야한다고 생각합니다. 'x'분 후에 링크를 클릭하지 않으면 유효성이 만료되고 링크가 유효하지 않게됩니다. 물론 문자열은 데이터베이스에서 고유해야합니다. 유효성 검사가 끝나면 '활성 플래그'를 업데이트하거나 실제 사용자 데이터베이스에 '첫 번째 삽입'을 수행하면 모든 설정이 완료됩니다. –

+0

해시 된 암호가 로그인에 사용되면 다른 해시를 생성하여 활성화 코드로 사용해야합니다. – Pietu1998

+0

refugnic-eternium 덧글 외에도 고유 한 ID로 긴 형식의 날짜를 사용할 수 있으므로 만료 된 링크를 쉽게 계산할 수 있습니다. 하지만 오래 유지하는 방법을 동기화하는 동안 생성 :) – Sach

답변

3

나의 제안은 두 번째 테이블을 사용합니다 likethis 내 UpdateDBService이 보일 것입니다 생각, pending을했다.

기본적으로 구조에 따라 사용자 테이블의 '확장'또는 기본 데이터의 복사본입니다.

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

UID 및 ActCode은 하나의 ActCode 한 번에 UID에 따라 발행 될 수 있다는 것을 의미 모두 고유하고, 각 ActCode 만 할 수 있습니다

이 표는 가장 순수한 형태의에서, 다음과 같을 것 한번 연관 지어 라. ValidUntil은 유효 기간을 원하는대로 UNIX_TIMESTAMP() + x seconds의 반환 값을 포함합니다.

이 구조는 실제 사용자 테이블이 id, userdata, activated을 열로 제안합니다.

링크가 x 초 동안 사용되지 않으면 링크가 유효하지 않게되고 (UNIX_TIMESTAMP() > ValidUntil) 이전 활성화 링크가 삭제되는 동안 새 활성화 링크가 생성 될 수 있습니다.

또는 각 활성화 관련 요청과 함께 만료 된 활성화를 가져 와서 연관된 비활성 사용자 데이터를 제거 할 수 있습니다.

간격 내에서 링크를 클릭하면 활성화 코드가 제거되고 사용자 플래그가 업데이트됩니다. 당신은 여전히 ​​유효의 동안 ActCode가 사용되는 경우에만 UserData를 삽입합니다,

ActCode, ValidUntil, Userdata 

이 방법은, 당신의 USERTABLE가 완전히 선택에서 유지 :

또 다른 옵션은 확장 된 사용자 테이블이 될 것입니다. 이렇게하면 활성화되지 않은 계정에서 AutoIncrement가 보호되고 사용자 테이블에 Activated 필드가 필요하지 않습니다. 사용자 테이블에있는 즉시 활성화되기 때문입니다.

1

활성화는 인증과는 별도로 일반적으로 사용자가 액세스 권한이있는 유효한 이메일 주소 (또는 연락처 세부 정보)를 입력하는 데 사용됩니다.

사용자를 활성화하고 비밀번호 대신 해당 코드로 링크를 이메일로 보내려면 별도의 고유 코드를 생성해야합니다.

지금 내가 틀릴 수도 있지만 암호를 해싱하면 이메일을 통해 전송할 수 있다는 인상을 받고있는 것처럼 보입니다. 최선의 시나리오에서 공격자에게 무력에 무언가를 부여하고있는 것은 아닙니다.

활성화 한 후 사용자에게 자격 증명으로 로그인하도록 요청하십시오.

관련 문제