【问题标题】:How to sanitize user password information in WordPress?如何清理 WordPress 中的用户密码信息?
【发布时间】:2014-08-01 09:59:54
【问题描述】:

我正在我的 WordPress 网站上的自定义注册表单中捕获用户名、电子邮件和密码。我正在使用sanitize_user() 清理用户名,sanitize_email() 清理电子邮件地址。

例如:

$username = sanitize_user( $username );
$email = sanitize_email( $email );

我应该如何清理用户输入的密码?我能想到的只有sanitize_text_field( $pass ),但我确信这不是正确的做法。

参考:

【问题讨论】:

  • 为什么你应该清理密码?如果我使用强密码创建帐户,我不希望网站为我削弱它
  • 我假设你已经清理了所有东西,以防有人试图向数据库中注入一些讨厌的东西?
  • 密码由wp_insert_user() 散列。够了吗?
  • 散列就足够了...生成的散列创建一个字符串,其中仅包含对插入数据库有效的字符(无引号等),并且没有可以添加到数据库中的任何讨厌的字符

标签: php wordpress


【解决方案1】:

消毒不一定能保护您免于注射。为了防止这种情况发生,您需要使用准备好的语句 - 或者对于 WordPress,使用 $wpdb class

清理只是删除无效字符,在您上面给出的情况下,它会删除用户名中不允许的字符,或者有效电子邮件地址中不允许的字符。密码允许使用许多不同的字符类型,因为这就是它们“强大”的原因,所以您不想将它们去掉。

如果您使用wp_insert_user() 创建一个 WP 用户,那么您无论如何都不需要对其进行清理,该函数会为您处理一切。

【讨论】:

  • 出于兴趣,wp_insert_user() 是如何进行消毒的?
  • 你可以在core看到它。它使用sanitize_user() 作为用户名,使用wp_hash_password 作为密码。正如@Mark Ba​​rker 上面所说,散列密码足以进行清理。当然,WP 会正确处理数据库插入,因此不会有注入的机会——我相信这是您最初关心的问题。
  • 我注意到核心中的sanitize_user()wp_hash_password()。我没有注意到与清理电子邮件地址相关的任何事情。我错过了吗?还是用户的电子邮件插入到数据库中没有经过过滤?
  • 在注册和登录过程中限制密码字段的字符数量仍然是个好主意。
  • 查看 wp_insert_user,您似乎仍需要根据您提交的字段对 first_name、last_name、user_email、display_name 等字段进行自己的清理。
【解决方案2】:

wp_insert_user() 清理状态和过滤器关闭 (2021) WordPress 5.7


wp_insert_user()user_pass 默认:

不应消毒。


wp_insert_user()user_login 默认:


wp_insert_user()user_nicename 默认:


wp_insert_user()user_email 默认:

  • 没有明显的消毒。
  • 通过empty()过滤user_email
  • user_email 通过strcasecmp 与旧版本进行比较。
  • user_email 通过email_exists() 与旧版本进行比较。

wp_insert_user()user_urldisplay_namenicknamefirst_namelast_namelast_namedescription,默认:

  • 没有明显的消毒。
  • 没有不同的过滤器。
  • 没有明显的比较。

来源

【讨论】:

    【解决方案3】:

    如前所述,您可以使用sanitize_text_field() 函数。它可能会导致一些带有特殊字符等的疯狂密码出现问题。

    不过应该​​没问题。

    【讨论】:

    • 您不需要清理 WordPress 的密码字段,因为 wp_insert_user 或 wp_update_user 将对数据进行哈希处理并对其进行清理。您可以使用sanitize_text_field,但它会使一些密码失败并将一些 %20 值转换为 HTML 实体,如空格或字符等。
    猜你喜欢
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多