我已经将我的项目网站从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也被认为是弱的。
所以,一个相同的过程可以是:
- 不要直接支持弱散列
- 导入弱散列,但使用强算法再次散列:strong(weak(cleartext))
- 在登录时,将双哈希内容升级为强(明文)
- 在此模式下运行系统一段时间,您的频繁用户将在某些时候拥有强(明文)哈希。
- 为了摆脱内部的weak()哈希,使所有这样的哈希无效(这只会影响你不经常使用的用户),给用户发送一个重置密码的链接和一些联系信息,以防遇到麻烦。在电子邮件中,你可以指出,你非常关心的安全性和重置是必要的,以提高它。如果不经常使用的用户仍然对您的服务感兴趣,他只需重置密码即可。如果他不再感兴趣,他就会忽略这封邮件。在任何情况下,你的密码存储中都不会有一个双哈希的pw,而只是一个无效的pw。
- 禁用对内部weak()哈希的支持,用于站点配置中的双哈希。
- 不支持内部哈希/双哈希。
- 之后,在软件中删除对内部哈希/双哈希的支持,以简化它。
注意:如果遗留系统存在安全漏洞,则不能使用旧的哈希值,因为您必须考虑到密码将被暴露。
这可以作为你的任务指南:
如何解密magento企业版密码?
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]