使用会话使登录脚本安全

时间:2013-06-13 15:05:10

标签: php mysql sql session login

我目前正忙于使用我自己的登录脚本,该脚本既简单又安全,足以满足我的目标。它使用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 个答案:

答案 0 :(得分:1)

  

我不确定这是否是一种正确/安全的方法。

看起来很好,但看起来你没有哈希你应该做的密码。看看BCrypt。

我不相信人们通常会在会话中存储用户ID和用户名,只需存储其中一个,您可以在发出新请求时查询所需的任何其他信息。

除了散列之外,它看起来非常好。