添加返回修改后的值的操作

时间:2013-10-18 作者:CBeTJlu4ok

我想在中修改提交的密码wp_logon wp_authenticate 行动进行身份验证时,我想获取提交的密码,修改它,并传递回wp_logon

下面是一个动作do_action_ref_array(\'wp_authenticate\', array(&$credentials[\'user_login\'], &$credentials[\'user_password\']));

我正在添加这样的操作(正如@kaiser所建议的):

add_action("wp_authenticate", "myfunctionhere");

function myfunctionhere($credentials) {
return $credentials[\'user_password\'] = \'foo\';
}
问题是它不会返回到wp\\u signon。还有更多,$credentials 在里面myfunctionhere 值为string(3) "aka" (用户名)

我在这里做的事情,我想修改http://wordpress.org/plugins/login-encryption/ 使用当前wordpress的插件。

这是挂接在wp\\u authenticate上的原始函数

function add_decryption_function() {
    global $user_pass;
    if ($_REQUEST[\'encryption_code\']) {

        // Obtenemos la clave DES usando nuestra clave privada RSA
        $key = new RSA(get_option(\'le_rsa_modulus\'), get_option(\'le_rsa_public_key\'), get_option(\'le_rsa_private_key\'));
        $code = $key->decrypt($_REQUEST[\'encryption_code\']); 

        // Obtenemos la clave usando la clave DES
        $password = des ($code, hexToString($_REQUEST[\'pwd\']), 0, 0, null, null);
        preg_match("/^([\\s\\w]*)/", $password, $res);
        $user_pass = $res[1];
        $_REQUEST[\'encryption_code\'] = "";
    }

}
全局$user\\u pass当然为空

我正在测试本地wp登录。php身份验证,没有其他插件。

2 个回复
最合适的回答,由SO网友:CBeTJlu4ok 整理而成

它在任何合理的黑客行为中都不起作用。

它唯一可行的方法是用全局变量对wp\\u logon核心函数本身进行攻击,而全局变量是不可分配的。

所以我选择了另一种解决方案。

我删除了身份验证功能并创建了自己的

remove_action(\'authenticate\', \'wp_authenticate_username_password\', 20);
add_filter(\'authenticate\', \'decrypt_and_authenticate\', 10, 3);

function decrypt_and_authenticate($user, $username, $password) {
    // firs check if password needs to be decrypted
    if ($_REQUEST[\'encryption_code\']) {

        // Obtenemos la clave DES usando nuestra clave privada RSA
        $key = new RSA(get_option(\'le_rsa_modulus\'), get_option(\'le_rsa_public_key\'), get_option(\'le_rsa_private_key\'));
        $code = $key->decrypt($_REQUEST[\'encryption_code\']); 

        // Obtenemos la clave usando la clave DES
        $pass = des ($code, hexToString($password), 0, 0, null, null);
        preg_match("/^([\\s\\w]*)/", $pass, $res);
        $password = $res[1];
        $_REQUEST[\'encryption_code\'] = "";
    }

    if ( is_a($user, \'WP_User\') ) { return $user; }

    if ( empty($username) || empty($password) ) {
        $error = new WP_Error();

        if ( empty($username) )
            $error->add(\'empty_username\', __(\'<strong>ERROR</strong>: The username field is empty.\'));

        if ( empty($password) )
            $error->add(\'empty_password\', __(\'<strong>ERROR</strong>: The password field is empty.\'));

        return $error;
    }

    $user = get_user_by(\'login\', $username);

    if ( !$user )
        return new WP_Error( \'invalid_username\', sprintf( __( \'<strong>ERROR</strong>: Invalid username. <a href="%s" title="Password Lost and Found">Lost your password</a>?\' ), wp_lostpassword_url() ) );

    if ( is_multisite() ) {
        // Is user marked as spam?
        if ( 1 == $user->spam )
            return new WP_Error( \'spammer_account\', __( \'<strong>ERROR</strong>: Your account has been marked as a spammer.\' ) );

        // Is a user\'s blog marked as spam?
        if ( !is_super_admin( $user->ID ) && isset( $user->primary_blog ) ) {
            $details = get_blog_details( $user->primary_blog );
            if ( is_object( $details ) && $details->spam == 1 )
                return new WP_Error( \'blog_suspended\', __( \'Site Suspended.\' ) );
        }
    }

    $user = apply_filters(\'wp_authenticate_user\', $user, $password);
    if ( is_wp_error($user) )
        return $user;

    if ( !wp_check_password($password, $user->user_pass, $user->ID) )
        return new WP_Error( \'incorrect_password\', sprintf( __( \'<strong>ERROR</strong>: The password you entered for the username <strong>%1$s</strong> is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?\' ),
        $username, wp_lostpassword_url() ) );

    return $user;
}

SO网友:kaiser

你可以在那里改变的是:

  • $secure_cookie = apply_filters(\'secure_signon_cookie\', $secure_cookie, $credentials); Cookie$credentials 对于user_loginuser_password1)示例

    add_action( \'wp_authenticate\', \'wpse119273UserCredentials\' );
    function wpse119273UserCredentials( $credentials )
    {
        // Make sure to secure that value
        $credentials[\'user_password\'] = \'foo\';
    }
    
    要生成安全密码,请查看函数wp_generate_password() 及其内部结构。或者更好:让它更安全。

    正如@brasofilo在评论中指出的那样(我已经对此进行了监督)@brasofilo-复制/粘贴我的答案以接受它,这是您的学分

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $