如何在 Sabre DAV 的 PDO 类中获取用户的明文密码?
Posted
技术标签:
【中文标题】如何在 Sabre DAV 的 PDO 类中获取用户的明文密码?【英文标题】:How to get user's plain password in PDO class of Sabre DAV? 【发布时间】:2021-05-07 08:47:34 【问题描述】:如何在 Sabre DAV 库的以下文件中获取当前登录用户的明文密码?
https://github.com/sabre-io/dav/tree/master/lib/CardDAV/Backend
in Baikal, this file is at:
\baikal\vendor\sabre\dav\lib\CardDAV\Backend\PDO.php
<?php
declare(strict_types=1);
namespace Sabre\CardDAV\Backend;
use Sabre\CardDAV;
use Sabre\DAV;
use Sabre\DAV\PropPatch;
/**
* PDO CardDAV backend.
*
* This CardDAV backend uses PDO to store addressbooks
*
* @copyright Copyright (C) fruux GmbH (https://fruux.com/)
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
class PDO extends AbstractBackend implements SyncSupport
...
...
【问题讨论】:
如果您能够从该库中获取用户的明文密码,那么没有人会使用它。获取这个值的目的是什么?你想达到什么目的? 我正在尝试使用用户的密码来实现加密。所以实际上我正在努力提高安全性。 你是说这个库使用纯文本密码并且你想为其他目的对其进行散列(注意加密和散列不是一回事,加密是可逆的,而散列不是' t)? 我在问一个关于这个 webdav 实现的具体问题。评论或答案最好指导我更改一些构造函数或设置一些全局变量。如果您需要了解更多关于这个库的信息,可以在我提供的链接中查找(lib 是 sabre-io)。该库使用普通密码进行身份验证,然后对其进行哈希处理以匹配存储的密码。 请分享更多细节 - 为什么任何数据库都应该以明文形式存储密码?后果很可怕,所以没有人会使用它,甚至你也不应该 【参考方案1】:对于基本身份验证,文件是这样的:
\baikal\Core\Frameworks\Baikal\Core\PDOBasicAuth.php
普通密码位于 validateUserPass 函数中,它可以存储在全局变量中(或问题的 cmets 中提到的会话中):
function validateUserPass($username, $password)
global $ptp;
$stmt = $this->pdo->prepare('SELECT username, digesta1 FROM ' . $this->tableName . ' WHERE username = ?');
$stmt->execute([$username]);
$result = $stmt->fetchAll();
if (!count($result))
return false;
$hash = md5($username . ':' . $this->authRealm . ':' . $password);
if ($result[0]['digesta1'] === $hash)
$this->currentUser = $username;
$ptp = $password;
return true;
return false;
然后,在 \baikal\vendor\sabre\dav\lib\CardDAV\Backend\PDO.php 文件中,可以使用 global $ptp;
检索 $ptp var 的值
【讨论】:
以上是关于如何在 Sabre DAV 的 PDO 类中获取用户的明文密码?的主要内容,如果未能解决你的问题,请参考以下文章
php+mysql 请问:用pdo如何获取某个表中记录的数目?