You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress插件页面中密码存储的最优加密实现方案

解决方案

你可以通过register_setting的sanitize_callback参数实现存储前加密,这个回调会在WordPress将选项存入数据库前触发,用来处理/校验提交的所有字段。

具体实现步骤

  • 第一步:修改设置注册代码,添加清理回调
add_action('admin_init', 'MY_register_settings');
function MY_register_settings() {
  register_setting( 
    'MY_settings', 
    'MY_settings',
    [
      'sanitize_callback' => 'MY_sanitize_plugin_settings', // 新增清理回调
      'default' => []
    ]
  );
}
  • 第二步:编写回调函数处理密码加密
    回调逻辑优先读取已存储的旧设置,避免用户未修改密码时覆盖原有哈希值,只有当用户提交了非空的新密码时才执行加密:
function MY_sanitize_plugin_settings($input) {
  // 获取已存储的旧配置
  $old_settings = get_option('MY_settings', []);
  // 初始化待存储的配置
  $sanitized = [];

  // 其他配置字段处理逻辑(如果有额外设置项可在此处添加校验规则)
  // ...

  // 处理密码字段
  if (!empty($input['password'])) {
    // 用户提交了新密码,执行加密
    $sanitized['password'] = password_hash($input['password'], PASSWORD_DEFAULT);
  } else {
    // 用户未输入新密码,保留原有加密后的密码
    $sanitized['password'] = $old_settings['password'] ?? '';
  }

  return $sanitized;
}

后续密码校验说明

如果后续需要验证用户输入的密码是否正确,直接用password_verify函数比对即可:

// 密码校验示例
$saved_password_hash = get_option('MY_settings')['password'] ?? '';
$user_input_password = '用户输入的明文密码';
if (password_verify($user_input_password, $saved_password_hash)) {
  // 密码验证通过逻辑
}

内容的提问来源于stack exchange,提问作者Bukpulp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:54:03