我已将我的项目站点从 magento 迁移到 django,这是一个拥有数百万用户的站点。我已经成功地从站点导入了所有数据,但我遇到的主要问题是迁移客户数据库,尤其是使用密码,因为显然我不能为 django 站点上的每个客户提供新密码,因为它会非常耗时。并且为客户重新设置密码,会非常烦人,很多客户会从网站上流失。
请给我一些想法如何从数据库中检索magento中的客户密码?
我已将我的项目站点从 magento 迁移到 django,这是一个拥有数百万用户的站点。我已经成功地从站点导入了所有数据,但我遇到的主要问题是迁移客户数据库,尤其是使用密码,因为显然我不能为 django 站点上的每个客户提供新密码,因为它会非常耗时。并且为客户重新设置密码,会非常烦人,很多客户会从网站上流失。
请给我一些想法如何从数据库中检索magento中的客户密码?
您无法恢复密码。Magento 使用带盐的散列来存储密码(根据版本为 md5 和 sha1)。
只有您可以做的事情 - 重置密码或在您的站点中实现与在 magento 中相同的密码检查功能。
乍一看,django 使用它来存储它的密码,md5${salt}${hashed_password}
并且它们预先添加了盐。在这种情况下,您应该能够获取 Magento 密码并重新格式化字符串,以便它通过 django 密码检查。
$hashArr = explode(':', $hash);
$newPasswordString = 'md5$'.$hashArr[1].'$'.$hashArr[0];
此答案的可行性/准确性将取决于您使用的是社区/专业版还是企业版。该代码基于社区代码,因为我可以更自由地共享它,这取决于企业的实现可能或不可能,您需要检查Mage_Core_Model_Encryption:validateHash
.
如果您从遗留系统中保留旧的和弱的哈希值,您就会危及您的用户。
如果某些攻击者(或某些邪恶的管理员)获得了对哈希值和用户数据的访问权,他可以轻松破解它们(参见例如http://hashcat.net/oclhashcat-plus/)并在全球范围内使用它们来对抗您的用户正在使用的任何服务(当然建议用户不要重复使用密码,使用强密码等,但许多人不会知道或忽略这一点)。
除了bcrypt、pbkdf2、shaXXX_crypt之外,弱散列是关于任何东西的。甚至像随机加盐的 sha256 这样的东西也必须被认为是弱的。
因此,一个健全的程序可能是:
注意:如果遗留系统存在安全漏洞,则无法选择旧哈希,因为您必须考虑暴露密码。
Cags 的答案对我有用。我正在从 Magento 社区版 1.7 迁移到 Django-Oscar。
我只有几百个用户需要移动,但重置他们的密码不是一种选择。
为了方便...
他的代码的python版本:
hash = xxxxxxxxxxxxxxxxx:xx # The hash from Magento DB table customer_entity_varchar
splithash = hash.split(':')
djangopass = 'md5$' + splithash[1] + '$' + splithash[0]
这可能是您寻求的指南: