session_start();
$member_username = $_POST['username'];
$member_password = $_POST['password'];
$crypt_pass = crypt($member_password,"somesalt");
try {
$dbh = new PDO('mysql:host=localhost;dbname='.DB_NAME, DB_USERNAME,DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
echo "Fatal error.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
$sth = $dbh->prepare("SELECT * FROM ".DB_PREFIX."_users WHERE username = :user AND password = :pass");
$sth->bindParam(':user', $member_username);
$sth->bindParam(':pass', $crypt_pass);
$sth->execute();
$total = $sth->rowCount();
$row = $sth->fetch();
变量$member_password
来自$_POST
,但有人可以解释并说明如何加密吗?
$crypt_pass = crypt($member_password,"somesalt");
答案 0 :(得分:0)
函数crypt返回密码的哈希值,你不能简单地从哈希中检索原始密码,攻击者也不能,这样你就可以将密码存储在具有优化安全性的数据库中,盐复杂度越高哈希越安全,请参阅http://php.net//manual/en/function.crypt.php
答案 1 :(得分:0)
crypt
是一个PHP函数,它接受一个字符串并使用DES算法(默认情况下)使用给定的salt对其进行加密。这是必需的,因为出于明显的安全原因,您不应该在没有加密或散列的情况下存储密码。
盐是一个(可能是随机的)值,您应该将其与用户的信息一起存储,并且为了使加密更加安全而需要它。 (有关更多信息,请参阅PHP文档;有关如何存储密码的教程,请参阅google)。
希望这会有所帮助:)