Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP登录系统——我做得对吗?_Php_Security_Login - Fatal编程技术网

PHP登录系统——我做得对吗?

PHP登录系统——我做得对吗?,php,security,login,Php,Security,Login,我对这东西有点陌生,但这是我的登录授权页面 function encrypt($password, $salt) { return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($salt), $password, MCRYPT_MODE_CBC, md5(md5($salt)))); } $query = "SELECT * FROM users WHERE LOWER(`username`) = :user"; $stm

我对这东西有点陌生,但这是我的登录授权页面

function encrypt($password, $salt) {
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($salt), $password, MCRYPT_MODE_CBC, md5(md5($salt))));
}

$query = "SELECT * FROM users WHERE LOWER(`username`) = :user";
$stmt = $dbh->prepare($query);
$stmt->bindValue(':user', strtolower($_POST['username']));
$stmt->execute();

if ($stmt->rowCount() == 1) {
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if (encrypt($_POST['password'], $row['salt']) == $row['password']) {
        echo "Logged in!";
    }
}
在我的数据库中,我有
username
password
salt
列。密码列包含加密的密码


我的工作流程是否正确?

您不应该加密密码。如果有人能够检索您的用户表,他可以轻松地撤消所有密码:

$password = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($salt), base64_decode($row['password']), MCRYPT_MODE_CBC, md5(md5($salt)));

最好使用。

@Zaffy您不应该加密密码,而应该对密码进行哈希运算。加密是可逆的,而散列(至少在理论上)不是。他特别说,你应该散列而不是加密密码。您将打开密码进行解密
$decrypted=rtrim(mcrypt_decrypt(mcrypt_RIJNDAEL_256,md5($key),base64_decode($encrypted),mcrypt_MODE_CBC,md5(md5($key)),“\0”)@Mr.Alien SHA-1即将被替换。大多数有安全意识的人都会使用硬件可扩展的算法,比如bcrypt或scrypt