2017-12-25 6 views
-4

Title. 내가 테스트 한 사용자 이름 확인을 통과시킵니다. 필자는 SQL 삽입을 피하기 위해 일부 트리밍/스트립 태그를 사용했습니다. 그러나 지금은 관심있는 유일한 부분은 매번 확인에 실패한 password_hash 및 password_verify입니다.password_verify는 매번 false를 반환합니다.

데이터베이스 암호 필드는 BLOB이지만 VARCHAR 255와 CHAR 255도 시도했습니다.

관련 로그인 확인 :

if(isset($_POST["login"])){ 
$username = trim($_POST['username']); 
$username = strip_tags($username); 
$username = htmlspecialchars($username); 

$loginpassword = trim($_POST['password']); 
$loginpassword = strip_tags($loginpassword); 
$loginpassword = htmlspecialchars($loginpassword); 


$loginQuery= "SELECT * FROM members where username='$username'"; 
$result = mysqli_query($conn, $loginQuery); 
$row = mysqli_fetch_assoc($result); 
$hash = $row['password']; 
if(password_verify($loginpassword, $hash)){ 
    $_SESSION['username'] = $username; 
    header("Location: index.php"); 
} 
else{ 
    $loginErrorExists= TRUE; 
} 
} 

관련 등록 코드 :

if(isset($_POST["register"])){ 
$username = trim($_POST['username']); 
$username = strip_tags($username); 
$username = htmlspecialchars($username); 

$password = trim($_POST['password']); 
$password = strip_tags($username); 
$password = htmlspecialchars($username); 

$email = trim($_POST['email']); 
$email = strip_tags($email); 
$email = htmlspecialchars($email); 

$conflictUserQuery = "SELECT username FROM members WHERE username='$username'"; 
$conflictUserResult = mysqli_query($conn, $conflictUserQuery); 
$conflictUserRow = mysqli_fetch_array($conflictUserResult, MYSQLI_ASSOC); 
$conflictMailQuery = "SELECT email FROM members WHERE email='$email'"; 
$conflictMailResult = mysqli_query($conn, $conflictMailQuery); 
$conflictMailRow = mysqli_fetch_array($conflictMailResult, MYSQLI_ASSOC); 
if(mysqli_num_rows($conflictUserResult) ==1){ 
    $userConflictExists = TRUE; 
} 
elseif(mysqli_num_rows($conflictMailResult) ==1){ 
    $mailConflictExists = TRUE; 
} 

else{ 
    $hash = password_hash($password, PASSWORD_DEFAULT); 
    $registerQuery = mysqli_query($conn, "INSERT INTO members (username, password, email) VALUES ('$username', '$hash', '$email')"); 
    if($registerQuery){ 
     $_SESSION['username']= $username; 
     header("Location: index.php"); 
    } 
} 
} 
+0

태그를 트리밍 및 스트라이핑한다고해서 SQL 삽입으로부터 보호받을 수는 없습니다. 사용자는 쿼리를 준비하고 매개 변수화해야합니다. .. Mysqli는 그것을 지원합니다 .. – JimL

+0

트리밍/스트리핑은 SQL 주입을 피하기에 충분하지 않습니다. password_hash 오용과는 관련이 없습니다. 일부 데이터베이스 발췌/입력/출력 샘플이 유용 할 수 있습니다. – mario

+0

인증 라이브러리를 사용하는 것이 좋습니다. 코딩 방법이 안전하지 않은 경우이를 확인하십시오. https://stackoverflow.com/questions/549/the-definitive-guide-to-form-based-website-authentication –

답변

0

내가 완전히 트림 (제거하여 그것을 해결), 펑크 마흔 나이 너의 제안에 따라 strip_tags()와 반드시 htmlspecialchars() .

1

$ password = htmlspecialchars ($ username);
예, 비밀번호로 $ 사용자 이름이 있습니다.

관련 문제