我的主持人要求我实施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。
答案 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)
试试https://wordpress.org/plugins/better-wp-security/; Wordpress上的https://wordpress.org/plugins/bulletproof-security/或其他安全插件。
答案 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();
}