htaccess Pass Protect干扰Wordpress功能

时间:2014-03-02 22:26:57

标签: wordpress .htaccess

我的主持人要求我实施htaccess authentication为我的Wordpress安装添加额外的安全层。

当访问Wordpress管理区域时,我被要求进行第二级(服务器)级别的身份验证。这很好,但我的网站上有一个通过保护的页面。不幸的是,此页面的所有用户也被要求提供htaccess凭证。

有没有更好的方法来添加这种强力保护?或者也许是一种排除特定页面要求第二个因素身份验证的方法?

此外,后者是否会削弱并挫败第二次登录的目的?

以下是教程中的相关代码......

ErrorDocument 401 "Unauthorized Access" ErrorDocument 403 "Forbidden" <FilesMatch "wp-login.php"> AuthName "Authorized Only" AuthType Basic AuthUserFile /home/username/.wpadmin require valid-user </FilesMatch>

编辑:对于拥有订阅者的WP站点,此方法似乎也不可行。当然他们需要访问wp-login.php。

4 个答案:

答案 0 :(得分:1)

您可以使用与请求的URI匹配的环境变量排除页面:

ErrorDocument 401 "Unauthorized Access" 
ErrorDocument 403 "Forbidden" 

SetEnvIfNoCase Request_URI ^/path/to/no-protect-page$ ok_uri=true

AuthName "Authorized Only" 
AuthType Basic 
AuthUserFile /home/username/.wpadmin 
Require valid-user
Allow from env=ok_uri
Satisfy Any

因此,放置此htaccess文件的目录将受密码保护,之外的/path/to/no-protect-page请求。

答案 1 :(得分:1)

如果使用以下指令应可以工作:

# passwordprotect wp-login.php
<Files wp-login.php>
<If "%{QUERY_STRING} != 'action=postpass'">
    AuthUserFile /path/to/passwd/file/.htpasswd
    AuthGroupFile /dev/null
    AuthName 'Login Message'
    AuthType Basic
    Require valid-user
</If>
</Files>

它的作用是,每次提供“ action”字符串且为“ postpass”时,跳过基本身份验证。

...只是一个想法:

我需要自己进行进一步测试,因为我不知道它将如何影响Wordpress的内部路由,例如/ action / postpass /。

答案 2 :(得分:0)

答案 3 :(得分:0)

当您可以更改WordPress密码形式时,为什么要更改htaccess。这对我有用。

add_filter( 'the_password_form', 'wpsight_password_form_dmd' );
function wpsight_password_form_dmd($output){
    global $wp;
    $post   = get_post( $post );
    $label  = 'pwbox-' . ( empty( $post->ID ) ? rand() : $post->ID );
    $output = '<form action="' . esc_url( home_url( $wp->request ).'/?postpassnew123=1' ) . '" class="post-password-form" method="post">
    <p>' . __( 'This content is password protected. To view it please enter your password below:' ) . '</p>
    <p><label for="' . $label . '">' . __( 'Password:' ) . ' <input name="post_password" id="' . $label . '" type="password" size="20" /></label> <input type="submit" name="Submit" value="' . esc_attr_x( 'Enter', 'post password form' ) . '" /></p></form>
    ';
return $output;    
}
if(isset($_GET['postpassnew123'])){
    if ( !isset($_POST['post_password'] ) ) {
        wp_safe_redirect( wp_get_referer() );
        exit();
    }
    require_once ABSPATH . WPINC . '/class-phpass.php';
    $hasher = new PasswordHash( 8, true );

    $expire  = apply_filters( 'post_password_expires', time() + 10 * DAY_IN_SECONDS );
    $referer = wp_get_referer();
    if ( $referer ) {
        $secure = ( 'https' === parse_url( $referer, PHP_URL_SCHEME ) );
    } else {
        $secure = false;
    }
    setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH, COOKIE_DOMAIN, $secure );

    wp_safe_redirect( wp_get_referer() );
    exit();
}