您好我正在尝试创建一个反向密码脚本,我在数据库中的密码是编码的,这是用于检索它的脚本:
<?php
$salt = "Zo4rU5Z1YyKJAASY0PT6EUg7BBYdlEhPaNLuxAwU8lqu1ElzHv0Ri7EM6irpx5w";
include_once("config.php"); //include the settings/configuration
$password = null;
/* function svarzcane kam bazata */
$email = $_POST['email'];
try {
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); //our new PDO Object
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch (PDOException $e) {
echo $e->getMessage(); //catch and show the error
}
$stmt = $con->prepare("SELECT password FROM users WHERE email = :getmail LIMIT 1");
$stmt->bindParam(":getmail", $_POST['email']);
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute();
while( $row = $stmt->fetch()) {
$pass = $row['password'];
}
这里的问题是,当我尝试解码密码时,它会在行中出错: Fatal error: Using $this when not in object context in /home/cedecapr/public_html/retrive.php on line 18
我如何解决这个问题?任何帮助都会被贬低。谢谢。
解码变量在类文件中定义:public $salt = "decoding code";
如何更改此行
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
解码数据库中的结果。哈希alghoritm在代码的顶部更新,以及..
答案 0 :(得分:1)
您可以完全删除此行:
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
您的SQL语句不包含名为:password
的参数,因此无需将任何值绑定到它。我猜你会复制&amp;从某些类方法粘贴这行代码,其中$this
是有意义的。
我也想知道如果你确实检索了密码会有什么不同,因为看起来数据库存储了盐渍密码的SHA256哈希值。散列是不可逆的,因此即使您从数据库中检索password
列的内容,用户也无法使用它来登录。
我认为在对任何网站的身份验证系统进行任何更改之前,您需要了解有关PHP编码以及安全性的更多信息。
答案 1 :(得分:0)
这一行:
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
应该是:
$stmt->bindValue( "password", hash("sha256", $password . $salt), PDO::PARAM_STR );
您不能在类定义之外使用$this->
。期。 \n
。 EOF
。