나는 현재 만든 간단한 로그인 시스템을 테스트 중입니다. 스크립트가 수행하는 작업은 내 데이터베이스에 입력 한 사용자 이름과 암호를 확인하고 둘 다 일치하면 사용자 이름을 세션 변수로 설정합니다. '회원 전용'페이지로 이동하면 세션 변수가 존재하는지 확인하고, 존재하지 않으면 사용자가 콘텐츠를 볼 수 없습니다. 의도 한대로 작동하는 것 같습니다. 위의 정보를 바탕으로 여기 내 질문이 있습니다 :쿠키로 PHP 로그인 시스템을 개선 할 수 있습니까?
내 방법에는 어떤 취약점이 있습니까?
쿠키로 쿠키를보다 안전하게 만들 수 있습니까? 그렇다면 내 코드와 어떻게 관련이 있을까요? 여기
사용자 이름 및 암호 확인 :
<?
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if ($username && $password){
$query = mysql_query("SELECT * FROM user WHERE username='$username' ");
$numrows = mysql_num_rows($query);
//if user exists
if ($numrows !=0){
while ($row = mysql_fetch_array($query)){
$dbusername = $row['username'];
$dbpassword = $row['password'];
}
if ($username == $dbusername && md5($password) == $dbpassword){
echo 'You\'re in! <a href="member.php">Click</a> here to enter the member page.';
$_SESSION['username'] = $dbusername;
}
else
echo "incorrect password!";
}
else
die("sorry, that user doesn't exist!");
}
?>
회원 전용 페이지 :
<?
session_start();
if ($_SESSION['username']){
echo "Welcome, ".$_SESSION['username']."!<br>
<a href='changepassword.php'>Change password</a>
";
}
else{
echo "please log in";
}
?>
1) 큰 취약점 : SQL 주입 !! 2) md5는 sha1() 또는 bcrypt와 같은 더 나은 대안을 가지고 있습니다. 3) 쿠키가 더 안전한 것은 아닙니다 (반대의 경우). 4) XSS 공격에주의하십시오. –