Wordpress可见性:受密码保护的页面(不区分大小写?)

时间:2014-11-18 15:30:04

标签: php wordpress passwords

我正在建立一个为特权客户提供受保护空间的网站,他们输入密码并获得独家优惠等。我已将可见性设置更改为密码保护并输入了密码。

我现在的问题是区分大小写!我无法在任何地方找到如何改变这一点。当然有办法吗?

任何人都可以在这里曝光吗?

亲切的问候,

肖恩

2 个答案:

答案 0 :(得分:2)

快速解决方案是安装插件:

https://wordpress.org/plugins/case-insensitive-passwords/installation/

这个似乎可以解决问题,并表示它与4.0版兼容

我也发现了这个here

编辑显示实际代码(确认有效,但不是因为密码保护页面使用其他功能http://codex.wordpress.org/Function_Reference/post_password_required):

<?php
if ( !function_exists('wp_set_password') ) {
    function wp_set_password( $password, $user_id ) {
        global $wpdb;
        $password = strtolower( $password );

        $hash = wp_hash_password($password);
        $wpdb->update($wpdb->users, array('user_pass' => $hash, 'user_activation_key' => ''), array('ID' => $user_id) );

        wp_cache_delete($user_id, 'users');
    }
}
if ( !function_exists('wp_hash_password') ) {
    function wp_hash_password($password) {
        global $wp_hasher;
        $password = strtolower( $password );

        if ( empty($wp_hasher) ) {
            require_once( ABSPATH . 'wp-includes/class-phpass.php');
            // By default, use the portable hash from phpass
            $wp_hasher = new PasswordHash(8, TRUE);
        }

        return $wp_hasher->HashPassword($password);
    }
}
function case_insensitive_check_password( $check, $password, $hash, $user_id ) {
    global $wp_hasher;

    if ( !$check ) {
        if ( empty($wp_hasher) ) {
            require_once( ABSPATH . 'wp-includes/class-phpass.php');
            // By default, use the portable hash from phpass
            $wp_hasher = new PasswordHash(8, TRUE);
        }

        $password = strtolower( $password );
        $check = $wp_hasher->CheckPassword($password, $hash);
    }

    return $check;
}
add_filter( 'check_password', 'case_insensitive_check_password', 10, 4 );

编辑:

我已经审核了代码,发现更好的方法是在表单上快速而肮脏的黑客攻击,强制所有插入的字符都是小写的。

将以下代码添加到functions.php文件中:

function my_password_form() {
    global $post;
    $label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
    $o = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
    ' . __( "To view this protected post, enter the password below:" ) . '
    <label for="' . $label . '">' . __( "Password:" ) . ' </label>
    <input name="post_password" onChange="javascript:this.value=this.value.toLowerCase();" id="' . $label . '" type="password" size="20" maxlength="20" />
    <input type="submit" name="Submit" value="' . esc_attr__( "Submit" ) . '" />
    </form>
    ';
    return $o;
}
add_filter( 'the_password_form', 'my_password_form' );

请注意,现在您只能在管理中插入小写密码,否则它将无效。

代码正在做什么是onChange将插入的单词转换为小写,但是如果你输入一个带大写字母的密码,它就无法正常工作。

Ex:受密码保护的页面密码:Banana - &gt;插入密码:香蕉=它会比较香蕉和香蕉,因为插入的将是小写的。

您可以按照此link

将hack检查为插件

答案 1 :(得分:0)

我也是想弄清楚这个。我尝试了nunorbatista为functions.php提供的代码,但它没有用。我发现另一个问题有一个答案,解决方案几乎相同,只是他们使用&#34; onkeypress&#34;而不是&#34; onChange&#34;。这是他的代码,这个小改动:

function my_password_form() {
    global $post;
    $label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
    $o = '<form action="' . esc_url( site_url('wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
    ' . __( "To view this protected post, enter the password below:" ) . '
    <label for="' . $label . '">' . __( "Password:" ) . ' </label>
    <input name="post_password" onkeypress="javascript:this.value=this.value.toLowerCase();" id="' . $label . '" type="password" size="20" maxlength="20" />
    <input type="submit" name="Submit" value="' . esc_attr__( "Submit" ) . '" />
    </form>
    ';
    return $o;
}
add_filter( 'the_password_form', 'my_password_form' );