2011-12-30 5 views
1

최근에 내 웹 사이트에서 많은 제안을 받았으며 그 중 하나는 사용자 이름을 소문자로 사용하여 로그인 할 수있게하는 것이 었습니다.사용자 이름으로 로그인하지만 소문자 사용자 이름으로 로그인하십시오.

JoHNdoE가 데이터베이스에있는 사용자 이름과 비슷하다면 로그인을 시도하고 그 대문자를 어디에 두는 지 기억해야한다면 매우 귀찮을 것입니다.

그래서 John Doe이 (가)이 사용자 이름으로 로그인 할 수 있도록 johndoe로 변경했습니다. 기억하기가 훨씬 쉽습니다.

내 쿼리는 현재

$get_user_info = mysql_query("SELECT * FROM users WHERE username = '$entered_username' AND md5_username = '$md5_entered_username' AND password = '$entered_password' LIMIT 1"); 

입니다 그리고 내가 이것에 대해 갈 것이라고 어떻게

if (mysql_num_rows($get_user_info)==1) { 
//then log them in 
} else { 
//kick 'em out! 
} 

를 계속 할 것인가?

+7

왜 사용자 이름의 md5 해시를 저장하고 비교합니까? 왜 암호 해시를 저장하지 않습니까? 그건 말이 안돼! – Dan

+2

[SQL 주입] (http : // en.)을 방지하기 위해 [PHP Prepared Statements] (http://php.net/manual/en/pdo.prepared-statements.php)를 사용하지 않는 PHP 코드를 보았을 때 걱정이됩니다. wikipedia.org/wiki/SQL_injection) 취약점. 여기에 붙여 넣지 않은 코드에서 변수를 살균하기를 바랍니다. 그렇지 않다면, 변수를 살균하려고 시도하는 대신 PDO Prepared Statements를 사용하도록 코드를 다시 작성하십시오. – sarnold

+1

와우, 당신은 SQL 주입을 위해 활발히 활동하고 있습니다. [PHP에서 SQL 주입을 중단하는 가장 좋은 방법] (http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php)에서 SO 스레드를 확인하십시오. – sczizzo

답변

4
  1. 당신이 SQL 주입 공격

  2. 을 제거 그래서 사용자 이름의 형식을 확인
  3. 사용자 이름

    MD5 해시는 대문자와 소문자 문제와 같은 의미가 될 것이다. 당신은 당신의 현재 DB 모델 이제 암호를 비교

    $get_user_info = mysql_query(
        "SELECT * FROM users WHERE username = '$entered_username' LIMIT 1") 
    

    에 따라, 대신이 아닌 암호를 해시해야 일반 텍스트

  4. 에서이 저장 될하지만.

    $entered_username = strtolower($entered_username); 
    $get_user_info = mysql_query("SELECT * FROM `users` WHERE LOWER(`username`) = '$entered_username' AND `password` = '$entered_password' LIMIT 1"); 
    

    경우 :

    I에 대한 보안 (특히 암호 해싱 ...)에 동의하는 모든 주석에서 별도로
+2

내 보안에 대해 궁금해하는 것보다 실제로 질문에 대답 해 주셔서 감사합니다. – Frank

+0

Np.하지만 보안은 중요합니다. 많은 대형 사이트가 SQL 주입 공격에 의해 중단되었습니다. 하나의 일반적인 규칙은 항상 사용자 입력을 필터링하는 것입니다. –

+0

저는 항상 그렇게합니다. 사용자 생성 데이터를 저장하거나 포함하는 변수는 mysql_real_escape_string()을 통해 실행 된 다음 strip_tags()로 html로 필터링됩니다. – Frank

2

, 문자를 구분 사용자 이름 케이스를 만들기 위해 MD5의 사용자 이름 사용할 수 없습니다 귀하의 사용자 이름은 고유합니다 (나는 그들이 ...이라고 가정합니다) LIMIT 절을 제거 할 수 있으며 암호 확인을 제거하고 php에서이를 수행하여 로그인 오류를보다 잘 처리 할 수 ​​있습니다 (별도의 존재하지 않는 사용자 이름은 잘못된 비밀번호).

관련 문제