2013-11-25 3 views
-2

회원 가입 양식과 내 웹 사이트 로그인 양식을 만들었습니다. 모든 것이 정상적으로 작동합니다 : 내 웹 사이트에 로그인 할 때 실제로 입력 한 암호가 아닌 암호화 된 암호를 입력해야합니다. 등록 양식이 소금에 담겨져 있으므로 모든 사용자가 사용할 수있게 만들었습니다. 그가 실제로 입력 한 암호로 로그인 할 수 있습니까? 감사등록 양식 오류?

Register.php

<?php 
include 'header inc.php'; 
$error = ""; 
if (@$_POST['register']) { 
$firstname = strip_tags($_POST['firstname']); 
$lastname = strip_tags($_POST['lastname']); 
$username = strip_tags($_POST['username']); 
$email = strip_tags($_POST['email']); 
$password1 = strip_tags($_POST['password']); 
$password2 = strip_tags($_POST['passwordrepeat']); 

$day = strip_tags($_POST['day']); 
$month = strip_tags($_POST['month']); 
$year = strip_tags($_POST['year']); 
$dob = "$day/$month/$year"; 

if ($firstname == '') { 
    echo "Firstname cannot be left empty."; 
} 
else if ($lastname == '') { 
    echo "Lastname cannot be left empty."; 
} 
else if ($username == '') { 
    echo "Username cannot be left empty."; 
} 
else if ($email == '') { 
    echo "Email cannot be left empty."; 
} 
else if ($password1 == '') { 
    echo "Password cannot be left empty."; 
} 
else if ($password2 == '') { 
    echo "Repeat Password cannot be left empty."; 
} 
else if ($day == '') { 
    echo "The day you were born cannot be left empty."; 
} 
else if ($month == '') { 
    echo "The month you were born cannot be left empty."; 
} 
else if ($year == '') { 
    echo "The year you were born cannot be left empty."; 
} 
else { 
//Check the username doesn't already exist 
$check_username = mysql_query("SELECT username FROM users WHERE username='$username'"); 
$numrows_username = mysql_num_rows($check_username); 
if ($numrows_username != 0) { 
    echo 'That username has already been registered.'; 
} 
else 
{ 
    $check_email = mysql_query("SELECT email FROM users WHERE email='$email'"); 
$numrows_email = mysql_num_rows($check_email); 
if ($numrows_email != 0) { 
    $error = 'That email has already been registered.'; 
} 
else 
{ 
    $salt1 = "francis"; 
    $salt1 = md5($salt1); 
    $salt2 = "cookie"; 
    $salt2 = md5($salt2); 
    $salt3 = "php"; 
    $salt3 = md5($salt3); 
    $password1 = $salt1.$password1.$salt3; 
    $password1 = md5($password1.$salt2); 
    $password2 = $salt1.$password2.$salt3; 
    $password2 = md5($password2.$salt2); 
if ($password1 != $password2) { 
$error = 'The passwords don\'t match!'; 
} 
else 
{ 
//Register the user 
$register = mysql_query("INSERT INTO users VALUES('','$firstname','$lastname','$username','$email','$password1','$dob','no')"); 
die('Regsitered successfully!'); 
} 
} 
} 
} 
} 
?> 
<html> 
<head></head> 
<body> 

<h2 style="color:#848484;">Create Your Account</h2> 
<form action='join.php' method='POST'> 
<input type='text' name='firstname' onclick='value="" ' id='username1'/><p /> 
<input type='text' name='lastname' onclick='value=""'id='username1'/><p /> 
<input type='text' name='username'onclick='value=""'id='username1'/><p /> 
<input type='text' name='email' onclick='value=""'id='username1'/><p /> 
<input type='text' name='password' onclick='value=""'id='username1'/><p /> 
<input type='text' name='passwordrepeat' onclick='value=""'id='username1'/><p /> 
<input type='text' name='day' value='' size='3' maxlength='2' onclick='value=""'id='username1'/> 
<input type='text' name='month' value='' size='6' maxlength='2' onclick='value=""'id='username1'/> 
<input type='text' name='year' value='' size='4' maxlength='4' onclick='value=""'id='username1'/><p /> 

<input type='submit' name='register' value='Create Your Account'id='submit1' /> 
<?php echo $error; ?> 
</form> 

</body> 

Login.php

<?php 
include ('header inc.php'); 
if (isset($_POST['username'])&&($_POST['password'])) { 
    $username = strip_tags($_POST['username']); 
    $password = strip_tags($_POST['password']); 
$check_username = mysql_query("SELECT username FROM users WHERE username='$username'"); 
$numrows = mysql_num_rows($check_username); 
if ($numrows != 1) { 
    echo 'That User doesn\'t exist.'; 
} 
else 
{ 
    $check_password = mysql_query("SELECT password FROM users WHERE password='$password' && username='$username'"); 
    while ($row = mysql_fetch_assoc($check_password)) { 
    $password_db = $row['password']; 

    if ($password_db == $password) { 
    $_SESSION['username'] = $username; 
    header("Location: template.php"); 
    } 
    } 
} 
} 

?> 



<h2 style="color:#848484;">&nbsp&nbsp&nbsp&nbspLogin to Your Account</h2> 
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<form action='login.php' method='POST'> 
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<input type='text' name='username' id="username1"/><p /> 
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<input type='password' name='password' id="username1"/><p /> 

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<input type='submit' name='submit' value='Login to my Account' id="submit1" /> 
</form> 
<br> 
<br> 
<br> 
<br> 
<br> 
<br> 
<br> 
<br> 
<br> 
+2

SQL 삽입 취약점, 유효하지 않은 HTML 엔티티,'@'오류 억제 사용, 로그인 양식에 입력 된 암호 해시 실패, 더 이상 사용되지 않는/더 이상 쓸모없는 mysql 라이브러리 사용 ... 가야할까요? 에? –

+1

1) 왜 * 당신이 암호를 해싱하는지 이해하고 있습니까? 2) 입력 된 암호를 해시하고 확인을 위해 데이터베이스의 해시와 비교해야합니다. 3) 소금에 잘못 끼고있는 경우 암호마다 임의의 소금을 사용해야합니다. 4) 암호 해싱을 위해 MD5가 손상되었습니다. 5) PHP의 암호 해시 함수를 사용하십시오 : http://php.net/password_hash – deceze

+0

어떻게이 코드를 모두 수정합니까 / – user3025939

답변

0

당신은 당신이 DB에서 빼냅니다 때 따라서 여전히있을 것이다 DB에 소금 암호의 MD5를 저장하는 그런 식으로. 암호를 확인하는 것과 동일한 작업을 수행해야합니다.

$salt1 = "francis"; 
$salt1 = md5($salt1); 
$salt2 = "cookie"; 
$salt2 = md5($salt2); 
$salt3 = "php"; 
$salt3 = md5($salt3); 
$password1 = $salt1.$password.$salt3; 
$password1 = md5($password1.$salt2); 
if ($password_db == $password1) { 
    //code 
} 

위의 의견은 다른 주요 문제가 있습니다.