【问题标题】:Wordpress User Password Data as Plaintext / Export Wordpress User Password to DjangoWordpress 用户密码数据作为纯文本/将 Wordpress 用户密码导出到 Django
【发布时间】:2017-04-12 08:26:46
【问题描述】:

我的 wordpress 中有大约 900 个用户,我正在将这些用户数据导出到将使用 Django 的新平台。

我的问题是,如何将这些用户的密码导出为纯文本?如果我做不到,我想将它存储在新数据库的“old_password”字段中,但我想知道如何将文本与 old_password “匹配”?因为我的计划是,当用户登录时,我会尝试使用相同的电子邮件和散列密码找到用户,但我不知道 Wordpress 使用了哪种类型的散列函数以及 Python Django 中的等效函数。

【问题讨论】:

  • 我真的希望你不能访问你用户的纯文本密码......找到 wordpress 的哈希算法并不比谷歌搜索更费力。
  • 如果您查看一些加盐和散列密码,它们可能会告诉您使用了什么:algorithm$rounds$hash$salt
  • wordpress 使用位于wp-includes/pluggable.php.wp_hash_password
  • 为了清楚起见,如果我不能得到它,我真的不需要明文密码,我需要的是能够知道一些明文与散列的 wordpress 密码相同。否则,将导入到我的 Django 应用程序的用户无法在旧的 wordpress 站点中使用他们的电子邮件和密码组合登录。

标签: php python django wordpress


【解决方案1】:

现代密码控制被明确设计为不可能对纯文本进行确定性计算。因此,确定它的唯一方法是通过“蛮力”攻击(尝试散列所有可能的密码,直到找到正确散列的密码)或更复杂的技术,例如使用 rainbow tables,这可以减少计算时间,但使用大量的存储空间。

this article 中有一些关于 WordPress 密码安全性的信息,可能会对您有所帮助,this article 包含您可以通过将其转换为 Python 来重新利用的 PHP 代码。

听起来,不过,最简单的方法是在首次登录新站点时根据old_password 验证用户的现有密码,然后强制他们(通过将他们重定向到特定页面)更改他们的密码,完成后清除old_password 字段。

【讨论】:

  • 问题是,“old_password”字段是空的,我希望用wordpress散列密码填充它。当用户在登录页面中输入他们的数据时。我检查了电子邮件,然后使用 old_password 对密码进行哈希处理(如果该用户的 old_password 字段不为空)。
  • 对不起,我没有意识到导出没有包含旧密码的哈希。如果没有这些,您似乎无能为力,只能在 WordPress 网站内创建一个页面,该页面仅供登录用户使用,并带有指向新网站“重置密码”页面的链接。由于您必须包含某种形式的标识符,以便新站点可以确定尝试迁移的用户,因此您应该通过包含一些可验证的哈希值来保护链接,以便新站点检查链接是否真实。
  • 我先想办法,因为在wordpress中,你可以通过phpmyadmin更改密码,他们在PHPMyAdmin中使用MD5。
【解决方案2】:

使用这个库,https://github.com/jmoswalt/wp-to-django-users

基本上,您添加 django 重新散列旧 wordpress 密码的功能,以便您的旧 wordpress 用户现在可以在新的 django 站点上使用他们相同的旧密码

在 django 项目的 settings.py 文件中,添加以下内容:

PASSWORD_HASHERS = (
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.BCryptPasswordHasher',
'django.contrib.auth.hashers.SHA1PasswordHasher',
'django.contrib.auth.hashers.MD5PasswordHasher',
'django.contrib.auth.hashers.CryptPasswordHasher',
'hashers_passlib.phpass',
)

然后重新散列密码,就完成了。

from django.contrib.auth.hashers import get_hasher
hasher = get_hasher('phpass')
user.password = hasher.from_orig(user.password)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多