我对安全性不太熟悉,因此我依赖于我在互联网上找到的内容。我找到了一个人的网站,他解释了他的所作所为以及他的方法是如何运作的。人们可以复制粘贴它来缓解事情。 虽然我确实理解了很多,但我自己也无法想出来(我是PHP / XHTML等新手)。
网站:How to store safely with PHP and MySQL
他在他的教程中使用PDO。我能够将信息存储在数据库中。但是当我尝试使用他提供实际登录代码的脚本时,虽然它似乎包含错误。
我已经完成了所有工作并且一切正常,但是散列密码与插入的密码(使用哈希等)的比较无法正常工作。
这里发生了什么?
提前致谢!
修改
人们一直在要求代码,这里是:
session_start();
require('config.php');
// Setting up a connection
$MyConnection = new PDO('mysql:host=*;dbname=*', $dbuser, $pass);
// Retrieving information from form.
$username = $_POST['username'];
$password = $_POST['password'];
$sth = $MyConnection->prepare("SELECT * FROM AMP_Users WHERE Username = :username LIMIT 1");
$sth->bindParam(':username', $username);
$sth->execute();
$user = $sth->fetch(PDO::FETCH_OBJ);
// Hashing the password with its hash as the salt returns the same hash
if (crypt($password, $user->hash) == $user->hash) {
echo 'You are now logged in. If we actually used sessions this time.';
}
一旦代码开始工作,我将添加$ _SESSION ['name'] = $ username。到现在为止,如果它成功与否,我只是回应一下。并且它没有显示任何内容,因此它不起作用。
第二次编辑
就像快速更新一样,我提供的脚本是WHOLE脚本。什么都没发泄。 (除了数据库名称等) 因此,我想知道问题可能是我不使用将密码保存到数据库中的哈希脚本。虽然我已经把它放入,但它仍然没有回应。我还在做错什么吗?
答案 0 :(得分:0)
也许您必须检查在数据库中存储密码的字段的长度...如果长度很小,则散列密码将不会整体存储..您将存储其中的一部分!
答案 1 :(得分:0)
if($_POST):
$name = $_POST['username'];
$pass = crypt($_POST['password'], '$2a$07$Hd893nD39Jdjd48Jdh3nD$');
$conn = new PDO('mysql:host=*; dbname=*', 'root', '');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $conn->prepare('SELECT * FROM user WHERE name = ? AND password = ?');
$stmt->execute(array($name, $pass));
if($stmt->rowCount() === 0){
echo 'Your Username / Password is incorrect. Please try again';
}else{
echo 'login success';
}
endif;
答案 2 :(得分:0)
我将其修改为在mysqli中运行并且工作正常:
$getAuth=$dbConAU->prepare("SELECT Password FROM Users WHERE UserName=? LIMIT 1");
$getAuth->bind_param("s",$UserName);
$getAuth->execute();
$getAuth->bind_result($hash);
$getAuth->fetch();
$getAuth->close();
if (crypt($Password, $hash) == $hash) {
return "OK";
}
else { return "Not OK"; }
答案 3 :(得分:0)
我知道这个帖子已经有几个月了,但有人可能会发现这个 SunnyTuts php pdo login and registration tutorial
教程很有帮助。我找到了这个线程和教程,同时寻找一种允许用户登录的安全方式。作为php和网页设计的新手我发现它有点难以理解,但我确信它对你们中的某些人来说似乎是小菜一碟....