尝试解析PDO对象时出错

时间:2013-10-25 23:31:46

标签: php pdo

您好我正在尝试创建一个反向密码脚本,我在数据库中的密码是编码的,这是用于检索它的脚本:

<?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";

按照Barmer的建议我不能使用这个utside类代码。比如何使用哈希算法绑定值。

如何更改此行

$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );

解码数据库中的结果。哈希alghoritm在代码的顶部更新,以及..

2 个答案:

答案 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->。期。 \nEOF