我已将我的项目网站从magento迁移到django,这是一个拥有数百万用户的网站。我已经成功导入了网站上的所有数据,但我遇到的主要问题是迁移客户数据库,尤其是密码,因为很明显我无法为django网站上的每个客户提供新密码,因为它会非常耗时。并且对于客户重置密码,将非常恼人,许多客户将从网站上丢失。
请告诉我如何从数据库中检索magento中的客户密码?
答案 0 :(得分:3)
您无法恢复密码。 Magento使用哈希与盐来存储密码(md5和sha1根据版本)。
只有您可以做的事情 - 重置密码或在您的网站中实现相同的功能来检查密码,就像在magento中完成一样。
答案 1 :(得分:1)
乍一看,似乎django使用md5${salt}${hashed_password}
存储密码,并且它们会添加盐。在这种情况下,您应该能够获取Magento密码并重新格式化字符串,以便它通过django密码检查。
$hashArr = explode(':', $hash);
$newPasswordString = 'md5$'.$hashArr[1].'$'.$hashArr[0];
此答案的可行性/准确性取决于您使用的是社区/专业还是企业。该代码基于社区代码,因为我可以更自由地分享这些代码,具体取决于企业可能会或可能不会实现,您需要检查Mage_Core_Model_Encryption:validateHash
。
答案 2 :(得分:1)
如果您保留旧系统中的旧漏和弱磁,则会危及您的用户。
如果某个攻击者(或某些邪恶的管理员)可以访问哈希和用户数据,他可以轻松破解它们(请参阅例如http://hashcat.net/oclhashcat-plus/)并在全局范围内对用户使用的任何服务进行攻击(当然用户)建议不要重复使用密码,使用强密码等,但许多人不会知道或忽略这一点。)
除了 bcrypt,pbkdf2,shaXXX_crypt之外,弱哈希与任何有关。甚至像随机盐渍的sha256这样的东西也必须被认为是弱的。
所以,理智的程序可能是:
注意:如果遗留系统存在安全漏洞,则不必选择旧哈希,因为您必须考虑要泄露的密码。
答案 3 :(得分:0)
答案 4 :(得分:0)
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]