2013-06-13 2 views
0

저는 현재 자신의 로그인 스크립트로 간단하지만 내 목표에 부합 할만큼 안전합니다. MySQL을 사용하여 사용자 이름과 암호를 저장합니다. 이제는 많은 튜토리얼에서 볼 수있는 것처럼 사용자가 로그인했는지 여부를 확인할 수있는 세션을 사용하는 시점에 이르렀습니다. 지금까지이 문제를 생각해 냈습니다. 그러나이 작업이 적절하고 안전한 방법인지 확실하지 않습니다.세션을 사용하여 로그인 스크립트를 안전하게 만드십시오.

<?php 

$db = new PDO('mysql:host=HOST;dbname=DATABASE;charset=UTF-8', 
       'USERNAME', 
       'PASSWORD', 
       array(PDO::ATTR_EMULATE_PREPARES => false, 
       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

if(isset($_POST['username']) && isset($_POST['password'])){ 
    $select = $db->prepare("SELECT id, username FROM vwo5_users WHERE username=:username AND password=:password"); 
    $select->execute(array(':username' => $_POST['username'], ':password' => $_POST['password'])); 
    $amount = $select->rowCount(); 
    $result = $select->fetch(PDO::FETCH_ASSOC); 
    $user_id = $result['id']; 
    $user_name = $result['username']; 


    if($amount >= 1){ 
    session_start(); 
    $_SESSION['user_id'] = $user_id; 
    $_SESSION['user_name'] = $user_name; 
    echo 'Logged in'; 
    } 
    else{ 
    echo 'Wrong login data'; 
    } 
} 
else{ 
    header('Location: dbtestform.php'); 
} 

?> 
세션에서 ID이름뿐만 아니라 데이터베이스에 함께 갈 여부를 그때 보안 페이지에서 확인 것이지만,이 안전되는 시점에 내 손가락을 넣어 수 없습니다

아닙니다. 나는 그것이 인터넷 전체에 걸쳐 기술되고 있다는 것을 알고 있지만, 내가 찾은 어떤 소스도 나에게 더 명확하게 만들지 않았다.

답변

1

이 방법이 적절하고 안전한 방법인지 확실하지 않습니다.

괜찮아 보이지만 분명히해야 할 비밀번호를 해싱 한 것으로 보이지 않습니다. BCrypt를 살펴보십시오.

사람들은 일반적으로 세션에 사용자 ID와 사용자 이름을 모두 저장하지 않고 하나만 저장하고 새로운 요청이있을 때 필요한 다른 정보를 쿼리 할 수 ​​있다고 생각합니다.

해시 이외의 다른 것은 완벽하게 잘 보입니다.

+0

네, 해싱에 대해 생각했지만 쉽게 테스트 할 수 있도록 남겨 두었습니다. 세션에서 ID를 사용하고 필요할 때 사용자 이름을 쿼리합니다. 승인 해 주셔서 감사합니다. – Stijn

관련 문제