0

我已将我的项目站点从 magento 迁移到 django,这是一个拥有数百万用户的站点。我已经成功地从站点导入了所有数据,但我遇到的主要问题是迁移客户数据库,尤其是使用密码,因为显然我不能为 django 站点上的每个客户提供新密码,因为它会非常耗时。并且为客户重新设置密码,会非常烦人,很多客户会从网站上流失。

请给我一些想法如何从数据库中检索magento中的客户密码?

4

5 回答 5

3

您无法恢复密码。Magento 使用带盐的散列来存储密码(根据版本为 md5 和 sha1)。

只有您可以做的事情 - 重置密码或在您的站点中实现与在 magento 中相同的密码检查功能。

于 2013-01-11T06:58:50.893 回答
1

乍一看,django 使用它来存储它的密码,md5${salt}${hashed_password}并且它们预先添加了盐。在这种情况下,您应该能够获取 Magento 密码并重新格式化字符串,以便它通过 django 密码检查。

$hashArr = explode(':', $hash);
$newPasswordString = 'md5$'.$hashArr[1].'$'.$hashArr[0];

此答案的可行性/准确性将取决于您使用的是社区/专业版还是企业版。该代码基于社区代码,因为我可以更自由地共享它,这取决于企业的实现可能或不可能,您需要检查Mage_Core_Model_Encryption:validateHash.

于 2013-01-11T09:33:39.470 回答
1

如果您从遗留系统中保留旧的和弱的哈希值,您就会危及您的用户。

如果某些攻击者(或某些邪恶的管理员)获得了对哈希值和用户数据的访问权,他可以轻松破解它们(参见例如http://hashcat.net/oclhashcat-plus/)并在全球范围内使用它们来对抗您的用户正在使用的任何服务(当然建议用户不要重复使用密码,使用强密码等,但许多人不会知道或忽略这一点)。

除了bcrypt、pbkdf2、shaXXX_crypt之外,弱散列是关于任何东西的。甚至像随机加盐的 sha256 这样的东西也必须被认为是弱的。

因此,一个健全的程序可能是:

  1. 不要只直接支持弱哈希
  2. 导入弱散列,但使用强算法再次散列它们:strong(weak(cleartext))
  3. 在登录时,将双散列的东西升级为强(明文)
  4. 以这种模式运行系统一段时间,您的频繁用户有时会拥有强(明文)哈希。
  5. 要摆脱内部的 weak() 哈希,使所有此类哈希无效(这只会影响您不经常使用的用户),向用户发送密码重置链接和一些联系信息以备不时之需。在电子邮件中,您可以指出您非常关心安全性,并且重置对于改进它是必要的。如果不经常使用的用户仍然对您的服务感兴趣,他只会重置他的密码。如果他不再感兴趣,他将忽略该电子邮件。在任何情况下,您的密码存储中都不会再有一个双哈希密码,而只是一个无效密码。
  6. 禁用对内部 weak() 散列的支持,以便在站点配置中进行双重散列。
  7. 不赞成在软件中支持内部散列/双散列。
  8. 稍后,删除软件中对内部哈希/双重哈希的支持,以简化它。

注意:如果遗留系统存在安全漏洞,则无法选择旧哈希,因为您必须考虑暴露密码。

于 2013-02-24T15:38:34.410 回答
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]
于 2013-02-17T19:14:58.377 回答
0

这可能是您寻求的指南:

如何解密magento企业版密码?

于 2013-01-11T08:19:57.173 回答