从 Prestashop 1.6 MD5 加密更新到 1.7
Updating from Prestashop 1.6 MD5 encryption to 1.7
我正在将 PS 1.6 更新到 1.7。我知道 PS 1.6 使用这种加密方法 md5(_COOKIE_KEY_.$passwd)
但我们之前将其转换为 md5($passwd)
以与我们以前的商店 not-prestashop 兼容。
现在我们要更新到1.7,我们看到加密方式已经变成了hash()。我们已经实现了登录以前的用户更改此功能:getByEmail()
,但现在我们希望注册能够正常工作(将密码保存为md5($plaintextpassword)
)。我们知道新的加密方法更安全,不建议使用 md5($plaintextpassword)
但现在我们无法更改它。
我们更改了 Classes/Customer.php 中的所有行:
$this->passwd = $crypto->hash($password);
至:
$this->passwd = md5($password);
但是随着我们注册新用户时发生的所有这些变化,它被保存为这种格式的 hash() 方法 $2y$10$VPm9ygay2ldd0Vu0J4ttQuOdD/mIytURV/nXCXKs4GcB4AkIWtaQm 而不是:bcef5cffa6f4bb0abb94cf6fa7a7cb2f。我没有找到必须更改以所需格式保存的位置?
您必须覆盖 PrestaShop 并添加新的附加密码检查程序:
if(!loginWithOriginalMethod($password)) {
loginWithAdditionalMethod($password);
}
通过这种方式,您的新老客户都可以登录您的店铺
如果您可以直接在数据库中导入以前的 1.6 散列,并且保留相同的 cookie 密钥,则该函数是向后兼容的。
但是如果像我一样 1.6 散列在我使用 csv 功能导入时使用新的 cookie 密钥重新散列,您需要更新 src/Core/Crypto/Hashing.php,替换最后一个函数通过:
确保用 Prestashop 1.6 中的 cookie 密钥替换
private function initHashMethods()
{
$this->hashMethods = array(
'bcrypt' => array(
'option' => array(),
'hash' => function ($passwd, $staticSalt, $option) {
return password_hash($passwd, PASSWORD_BCRYPT);
},
'verify' => function ($passwd, $hash, $staticSalt) {
/*
* Prevent enumeration because nothing happens
* when there is no, or an invalid hash.
* Also, change the password to be sure it's not maching
* the new hash.
* The new hash is equal to 'test' in BCRYPT context.
*/
if (empty($hash)) {
$hash = 'y$azRqq.pN0OlWjeVfVMZXOOwqYAx1hMfme6ZnDV.27grGOEZvG.uAO';
$passwd = 'wrongPassword';
}
return password_verify($passwd, $hash);
},
),
'md5' => array(
'option' => array(),
'hash' => function ($passwd, $staticSalt, $option) {
return md5($staticSalt . $passwd);
},
'verify' => function ($passwd, $hash, $staticSalt) {
return md5($staticSalt . $passwd) === $hash;
},
),
'bcryptmd5' => array(
'option' => array(),
'hash' => function ($passwd, $staticSalt, $option) {
return password_hash(md5('<your 1.6 cookie key>' . $passwd), PASSWORD_BCRYPT);
},
'verify' => function ($passwd, $hash, $staticSalt) {
/*
* Prevent enumeration because nothing happens
* when there is no, or an invalid hash.
* Also, change the password to be sure it's not maching
* the new hash.
* The new hash is equal to 'test' in BCRYPT context.
*/
if (empty($hash)) {
$hash = 'y$azRqq.pN0OlWjeVfVMZXOOwqYAx1hMfme6ZnDV.27grGOEZvG.uAO';
$passwd = 'wrongPassword';
}
return password_verify(md5('<your 1.6 cookie key>' . $passwd), $hash);
},
),
);
}
我正在将 PS 1.6 更新到 1.7。我知道 PS 1.6 使用这种加密方法 md5(_COOKIE_KEY_.$passwd)
但我们之前将其转换为 md5($passwd)
以与我们以前的商店 not-prestashop 兼容。
现在我们要更新到1.7,我们看到加密方式已经变成了hash()。我们已经实现了登录以前的用户更改此功能:getByEmail()
,但现在我们希望注册能够正常工作(将密码保存为md5($plaintextpassword)
)。我们知道新的加密方法更安全,不建议使用 md5($plaintextpassword)
但现在我们无法更改它。
我们更改了 Classes/Customer.php 中的所有行:
$this->passwd = $crypto->hash($password);
至:
$this->passwd = md5($password);
但是随着我们注册新用户时发生的所有这些变化,它被保存为这种格式的 hash() 方法 $2y$10$VPm9ygay2ldd0Vu0J4ttQuOdD/mIytURV/nXCXKs4GcB4AkIWtaQm 而不是:bcef5cffa6f4bb0abb94cf6fa7a7cb2f。我没有找到必须更改以所需格式保存的位置?
您必须覆盖 PrestaShop 并添加新的附加密码检查程序:
if(!loginWithOriginalMethod($password)) {
loginWithAdditionalMethod($password);
}
通过这种方式,您的新老客户都可以登录您的店铺
如果您可以直接在数据库中导入以前的 1.6 散列,并且保留相同的 cookie 密钥,则该函数是向后兼容的。
但是如果像我一样 1.6 散列在我使用 csv 功能导入时使用新的 cookie 密钥重新散列,您需要更新 src/Core/Crypto/Hashing.php,替换最后一个函数通过:
确保用 Prestashop 1.6 中的 cookie 密钥替换
private function initHashMethods()
{
$this->hashMethods = array(
'bcrypt' => array(
'option' => array(),
'hash' => function ($passwd, $staticSalt, $option) {
return password_hash($passwd, PASSWORD_BCRYPT);
},
'verify' => function ($passwd, $hash, $staticSalt) {
/*
* Prevent enumeration because nothing happens
* when there is no, or an invalid hash.
* Also, change the password to be sure it's not maching
* the new hash.
* The new hash is equal to 'test' in BCRYPT context.
*/
if (empty($hash)) {
$hash = 'y$azRqq.pN0OlWjeVfVMZXOOwqYAx1hMfme6ZnDV.27grGOEZvG.uAO';
$passwd = 'wrongPassword';
}
return password_verify($passwd, $hash);
},
),
'md5' => array(
'option' => array(),
'hash' => function ($passwd, $staticSalt, $option) {
return md5($staticSalt . $passwd);
},
'verify' => function ($passwd, $hash, $staticSalt) {
return md5($staticSalt . $passwd) === $hash;
},
),
'bcryptmd5' => array(
'option' => array(),
'hash' => function ($passwd, $staticSalt, $option) {
return password_hash(md5('<your 1.6 cookie key>' . $passwd), PASSWORD_BCRYPT);
},
'verify' => function ($passwd, $hash, $staticSalt) {
/*
* Prevent enumeration because nothing happens
* when there is no, or an invalid hash.
* Also, change the password to be sure it's not maching
* the new hash.
* The new hash is equal to 'test' in BCRYPT context.
*/
if (empty($hash)) {
$hash = 'y$azRqq.pN0OlWjeVfVMZXOOwqYAx1hMfme6ZnDV.27grGOEZvG.uAO';
$passwd = 'wrongPassword';
}
return password_verify(md5('<your 1.6 cookie key>' . $passwd), $hash);
},
),
);
}