2009-07-24 2 views
3

로그인 양식을 통해 입력 한 특정 사용자 이름으로 테이블에서 비밀번호 만 선택하면됩니다. 나는 암호를 mysql 테이블에 암호화 된 형태로 저장한다. 그래서 주어진 암호와 저장된 암호를 비교해야하고 "성공적으로 로그인"해야합니다. 그렇지 않으면 암호가 틀립니다. 이 code.Now 내가mysql에서 암호화 된 비밀번호를 선택하려면

mysql_select_db($dbName); 
$user_name=$_POST['name']; 
$pswd=$_POST['pswd']; 
$res  = mysql_query("select * from xxx where Name='$user_name'"); 
$row  = mysql_num_rows($res); 
echo $row; 
$encpass=mysql_query("SELECT password FROM xxx WHERE Name = '$user_name'"); 
$result1= mysql_fetch_array($encpass); 
echo $result1; 
if($row>0) 
{ 
//echo 'hi'; 
    if(md5($pswd)==$result1) 
     { 
     echo 'hi'; 
     echo "you have successfully signed in!!!"; 
     //echo $name = $row['Name']; 
     //header("location:check.html"); 
     } 
} 

else 
echo "you are not a member"; 

답변

1

당신은 배열로 결과 집합을 인쇄 ... 하나 PLZ 도움 .can "1Resource 아이디 # 4"로 출력을 내 얻고있다, 당신은 아직도 그것을 통과해야합니다.

그냥 변화 :

if(md5($pswd)==$result1) 

사람 :

if(md5($pswd)==$result1[0]) 
2

당신이 복잡 이상이다. 데이터베이스에서 암호를 검색 할 필요가 없습니다. 제출 된 사용자 이름과 암호가있는 행을 선택할 수 있는지 확인해야합니다.

먼저 사용자로부터 사용자 이름과 암호를 가져 와서 저장 한 형식으로 가져옵니다.

$username = $_POST['name']; 
$password = my_password_encryption_function($_POST['pswd']); 

두 번째로 SQL을 설정하십시오. SQL 주입 공격으로부터 보호하려면 준비된 문을 사용하십시오. 현재의 접근 방식은 안전하지 않으며 사용자가 임의의 사용자의 비밀번호를 변경할 수 있습니다 (다른 것들 중에서도).

$preparedStatement = $db->prepare('SELECT * FROM xxx WHERE Name = :name AND password = :password'); 
$preparedStatement->execute(array(':name' => $username, ':password' => $password)); 
$rows = $preparedStatement->fetchAll(); 

3 번째 - 반환 된 행을 세어보세요. 결과가 하나이면 암호가 일치합니다. 결과가 0 일 경우 암호가 일치하지 않습니다.

0

slipbull이 말한 것뿐만 아니라 "결과 집합을 배열로 인쇄 중이지만 여전히 트래버스해야합니다." - 귀하의 코드가 현재 VERY 인 것으로 알려드립니다.

사용자가 전달한 데이터를 곧바로 SQL 쿼리에 집어 넣고 있습니다. 그렇게함으로써 데이터베이스를 대신 할 수 있습니다.

대신 데이터를 처리하기 전에 mysql_real_escape_string()을 통해 매개 변수를 전달하십시오.

아무 것도하지 않으려면이 문제를 해결하십시오!

관련 문제