2013-02-09 3 views
0
내가 최근 3 주 동안 내 자신의 소셜 네트워크를 개발하고 난 다음 코드를 사용하여 내 데이터베이스에 저장에 암호를 해시 phpass을 사용하고

...Phpass 해시 된 암호

// END FORM DATA ERROR HANDLING 
// Begin Insertion of data into the database 

require("php_includes/PasswordHash.php"); 
$hasher = new PasswordHash(8,false); 
$p_hash = $hasher->HashPassword($p); 
if (strlen($p_hash)>=20){ 

    // Add user info into the database table for the main site table 
    $sql = "INSERT INTO users (username, email, password, gender, country, ip, signup, lastlogin, notescheck)  
      VALUES('$u','$e','$p_hash','$g','$c','$ip',now(),now(),now())"; 
    $query = mysqli_query($db_conx, $sql); 
    $uid = mysqli_insert_id($db_conx); 

내가 가진 작은 문제는 기본적으로 무슨 일이 시도 때 오류 메시지가 무엇입니까이다 ... 나는 간단한 양식 내 페이지 상단이 다음 코드 블록을 가지고 내 로그인 페이지에서

include_once("php_includes/check_login_status.php"); 
// If user is already logged in, header that weenis away 
if($user_ok == true){ 
    header("location: user.php?u=".$_SESSION["username"]); 
    exit(); 
} 
// AJAX CALLS THIS LOGIN CODE TO EXECUTE 
if(isset($_POST["e"])){ 
    // CONNECT TO THE DATABASE 
    include_once("php_includes/db_conx.php"); 
    // GATHER THE POSTED DATA INTO LOCAL VARIABLES AND SANITIZE 
    $e = mysqli_real_escape_string($db_conx, $_POST['e']); 
    require('php_includes/PasswordHash.php'); 
    $hasher = new PasswordHash(8, FALSE); 
    $hash = $hasher->HashPassword($p); 
    $checked = $hasher->CheckPassword($p, $hash); 
    $p = $_POST["p"]; 
    // GET USER IP ADDRESS 
    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR')); 
    // FORM DATA ERROR HANDLING 
    if($e == "" || $p == ""){ 
     echo "login_failed"; 
     exit(); 
    } else { 
    // END FORM DATA ERROR HANDLING 
     $sql = "SELECT id, username, password FROM users WHERE email='$e' AND activated='1' LIMIT 1"; 
     $query = mysqli_query($db_conx, $sql); 
     $row = mysqli_fetch_row($query); 
     $db_id = $row[0]; 
     $db_username = $row[1]; 
     $db_pass_str = $row[2]; 
     if($p != $db_pass_str){ 
      echo "login_failed"; 
      exit(); 
     } else { 
      // CREATE THEIR SESSIONS AND COOKIES 
      $_SESSION['userid'] = $db_id; 
      $_SESSION['username'] = $db_username; 
      $_SESSION['password'] = $db_pass_str; 
      setcookie("id", $db_id, strtotime('+30 days'), "/", "", "", TRUE); 
      setcookie("user", $db_username, strtotime('+30 days'), "/", "", "", TRUE); 
      setcookie("pass", $db_pass_str, strtotime('+30 days'), "/", "", "", TRUE); 
      // UPDATE THEIR "IP" AND "LASTLOGIN" FIELDS 
      $sql = "UPDATE users SET ip='$ip', lastlogin=now() WHERE username='$db_username' LIMIT 1"; 
      $query = mysqli_query($db_conx, $sql); 
      echo $db_username; 
      exit(); 
     } 
    } 
    exit(); 
} 

입니다 로그인하기! 누구든지 아이디어가있어? 답변에 대한

건배 ... 이런 식으로

?><?php 
// AJAX CALLS THIS LOGIN CODE TO EXECUTE 
if(isset($_POST["e"])){ 
    // CONNECT TO THE DATABASE 
    include_once("php_includes/db_conx.php"); 
    // GATHER THE POSTED DATA INTO LOCAL VARIABLES AND SANITIZE 
    $e = mysqli_real_escape_string($db_conx, $_POST['e']); 
    require('php_includes/PasswordHash.php'); 
    $hasher = new PasswordHash(8, FALSE); 
    $hash = $hasher->HashPassword($p); 
    $checked = $hasher->CheckPassword($p, $hash); 
    $hash = $_POST["p"]; 
    // GET USER IP ADDRESS 
    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR')); 
    // FORM DATA ERROR HANDLING 
    if($hash != $db_pass_str){//and not $p != $dp_pass_str 
     echo "login_failed"; 
     exit(); 
    } else { 
    // END FORM DATA ERROR HANDLING 
     $sql = "SELECT id, username, password FROM users WHERE email='$e' AND activated='1' LIMIT 1"; 
     $query = mysqli_query($db_conx, $sql); 
     $row = mysqli_fetch_row($query); 
     $db_id = $row[0]; 
     $db_username = $row[1]; 
     $db_pass_str = $row[2]; 
      // CREATE THEIR SESSIONS AND COOKIES 
      $_SESSION['userid'] = $db_id; 
      $_SESSION['username'] = $db_username; 
      $_SESSION['password'] = $db_pass_str; 
      setcookie("id", $db_id, strtotime('+30 days'), "/", "", "", TRUE); 
      setcookie("user", $db_username, strtotime('+30 days'), "/", "", "", TRUE); 
      setcookie("pass", $db_pass_str, strtotime('+30 days'), "/", "", "", TRUE); 
      // UPDATE THEIR "IP" AND "LASTLOGIN" FIELDS 
      $sql = "UPDATE users SET ip='$ip', lastlogin=now() WHERE username='$db_username' LIMIT 1"; 
      $query = mysqli_query($db_conx, $sql); 
      echo $db_username; 
      exit(); 
     } 
    exit(); 
} 
?> 

을 그것을 channged했지만 여전히 로그인 오류

+0

어떤 오류 메시지가 나타납니다? DB 오류? 아니면 "로그인 실패"일까요? –

+0

로그인 실패 오류 메시지! –

+0

코드를 살펴보면 사용자 게시 암호로 설정된 $ p 만 볼 수 있습니다. db에있는 _hashed_ 암호와 비교하면 –

답변

1

당신은 (해시되지 않은)를 POST 암호로 $의 페이지를 설정하는을 얻고있다

그 다음해야처럼
$p = $_POST["p"]; 

가 보이는 :

if($hash != $db_pass_str){   //and not $p != $dp_pass_str 
    echo "login_failed"; 

즉, 입력 된 암호와 해시 된 암호가 저장된 해시 된 암호를 비교합니다 (두 해시를 비교할 수 있도록)

+0

변경했지만 기쁨은 없습니다! 도와 줘서 고마워 Damien! –