【问题标题】:htaccess Pass Protect Interfereing With Wordpress functionalityhtaccess 密码保护干扰 Wordpress 功能
【发布时间】:2014-03-02 22:26:57
【问题描述】:

我的房东要求我实施 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。

【问题讨论】:

    标签: wordpress .htaccess


    【解决方案1】:

    当您可以更改 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();
    }
    

    【讨论】:

      【解决方案2】:

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

      # 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 的内部路由,例如/动作/postpass/。

      【讨论】:

      • 它现在似乎按预期工作。如果它在测试中幸存下来,它似乎是解决该问题的最佳解决方案之一。
      【解决方案3】:

      您可以使用与请求的 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的请求。

      【讨论】:

      • 好的,我试试这个。这会有意义地损害新的安全措施吗?在您的示例中,以 开头的行也已删除,这是故意的吗?
      • 另外,我需要把它移到根目录以外的新目录吗?
      • @square_eyes 文件匹配将身份验证应用到仅 wp-admin.php 页面。如果这是您想要的,则将它们重新添加,但这也意味着您的其他 URL 无论如何都不会受到影响
      • 我猜我的页面会以某种方式调用 wp-login.php,这就是为什么我的页面......我们称之为 /pagewithapass,它也需要 htaccess 身份验证。
      【解决方案4】:

      【讨论】:

      • 我已经在运行 Wordfence,如果可能的话,我宁愿不安装另一个安全插件。我不能只添加一行以从身份验证请求中排除我的页面吗?
      • 我想我找到了包含... &lt;?php if ( post_password_required() ) { ?&gt; &lt;form method="post" action="/wp-login.php?action=postpass"&gt; 它确实似乎引用了 wp-login.php。但这仍然没有改变这样一个事实,即在上面使用你的时,我没有被提示在任何地方进行身份验证。
      猜你喜欢
      • 2012-09-04
      • 1970-01-01
      • 2019-03-17
      • 2023-04-02
      • 2022-11-15
      • 2012-02-14
      • 2022-01-07
      • 1970-01-01
      • 2018-02-13
      相关资源
      最近更新 更多