WordPress6.3.1修改登录页面密码SM4国密加密传输

248 阅读2分钟

要求: WordPress 版本是6.3.1 国密SM4 文件是sm4.js 修改登录页 加密传输密码 wordpress 主题目录是 begin 请给我详细修改步骤 包括文件路径要详细 了解了,基于你提供的详细信息,以下是如何在WordPress 6.3.1版本中使用sm4.js进行登录密码的加密传输的方案:

  1. 将 sm4.js 文件放入 "begin" 主题目录 确保你的sm4.js文件已经放在WordPress的"begin"主题目录中。文件路径应该是:
/wp-content/themes/begin/sm4.js
  1. 修改WordPress登录页面 2.1. 引入 sm4.js 在WordPress的登录页面,你需要引入sm4.js。这可以通过login_enqueue_scripts钩子来实现。在你的begin主题的functions.php文件中添加以下代码:

文件路径:

/wp-content/themes/begin/functions.php

代码:

function enqueue_login_script() {
    wp_enqueue_script('sm4', get_template_directory_uri() . '/sm4.js', array(), null, true);
}
add_action('login_enqueue_scripts', 'enqueue_login_script');

2.2. 添加JavaScript逻辑 在密码输入框后面,添加一个隐藏的输入框来存放加密后的密码,并使用JavaScript对密码进行SM4加密:

继续在functions.php文件中添加以下代码:

function add_encryption_logic() {
    ?>
    <script type="text/javascript">
        document.getElementById('loginform').addEventListener('submit', function(e) {
            var password = document.getElementById('user_pass').value;
            var encryptedPassword = SM4.encrypt(password, 'your_key'); // 使用你的SM4密钥
            var hiddenInput = document.createElement('input');
            hiddenInput.type = 'hidden';
            hiddenInput.name = 'encrypted_pwd';
            hiddenInput.value = encryptedPassword;
            document.getElementById('loginform').appendChild(hiddenInput);
            document.getElementById('user_pass').value = ''; // 清空原密码框
        });
    </script>
    <?php
}
add_action('login_footer', 'add_encryption_logic');
  1. 修改WordPress后端处理 3.1. 安装一个支持SM4的PHP库 使用composer或其他方法安装一个支持SM4的PHP库。

3.2. 修改登录验证逻辑 继续在begin主题的functions.php文件中添加以下代码来解密接收到的密码:

function decrypt_login_password($user, $username, $password) {
    if (isset($_POST['encrypted_pwd'])) {
        $encryptedPassword = $_POST['encrypted_pwd'];
        $decryptedPassword = sm4Decrypt($encryptedPassword, 'your_key'); // 使用你的SM4密钥
        $_POST['pwd'] = $decryptedPassword; // 将解密后的密码放回POST数组中
    }
    return $user;
}
add_filter('authenticate', 'decrypt_login_password', 10, 3);
  1. 安全性注意事项 密钥管理:确保SM4的密钥安全存储,不要直接在JavaScript或PHP代码中硬编码。 SSL/TLS:尽管你使用了SM4加密,但仍然建议使用SSL/TLS(HTTPS)来加密整个通信过程,以增加额外的安全层。 前端加密的局限性:请注意,虽然前端加密可以增加一定的安全性,但它不能完全防止中间人攻击或其他安全威胁。始终保持系统的全面安全性。 这只是一个基本的方案,根据你的具体需求和环境,可能需要进一步的调整和优化。