wordpress修改后台登录地址增加安全性

2018年6月12日22:22:07wordpress修改后台登录地址增加安全性已关闭评论 2,040 次

很多wordpress博主都设置了登录才能评论的功能,这样一来就必须允许用户注册,很多博主会认为游客和管理员共用一个登录地址会造成安全问题,或者单纯就是为了管理员单独开启一个登录入口。

关注这个问题,百度找到的答案最多的就是修改wp-login.php和general-template.php,对于很对用户很不方便,并且一旦程序更新又要重新修改。下面就介绍一种不用修改文件,单纯通过钩子实现的方法。

效果:只能通过自定义的地址登录wp,原wp-login.php返回404。

首先,通过login_url修改wp_login_url()函数返回的登录地址,该函数被很多主题调用以跳转到登录页;通过logout_url修改wp_logout_url()函数返回的登录地址。

login_url过滤器包含三个参数,$login_url,$redirect,$force_reauth,其中

  • $login_url(必须),登录用的自定义url,例如http://example.com/my-login-page,默认wp-login.php
  • $redirect(可选) 登录成功后重定向的地址,默认无。
  • $force_reauth(布尔值,可选),如果为true,无论cookie什么值,都强制重新认证。
add_filter( 'login_url', 'my_login_page', 10, 3 );
function my_login_page( $login_url, $redirect, $force_reauth ) {
return home_url( '/my-login-page/?redirect_to=' . $redirect );
}

通过以上代码,登录地址则变为/my-login-page

logout_url过滤器需要两个参数,$logout_url和$redirect

  • $logout_url登出wordpress的url,也就是后台右上角的“登录”的url
  • $redirect 成功登出后跳转到的地址
add_filter( 'logout_url', 'my_logout_page', 10, 2 );
function my_logout_page( $logout_url, $redirect ) {
return home_url( '/my-logout-page/?redirect_to=' . $redirect );
}

通过以上代码,登出url更改为/my-logout-page

注:通常情况下,我们不会为登录和登出设定两个url,而是通过类似 /my-login-page?action=logout实现登出功能。

第二步,让wp-login.php返回404。

这里需要用到wp_init钩子,判断请求的url是否wp-login.php,如果是,则redirect到404地址。


add_action('login_enqueue_scripts','wp_login_php_404');
function wp_login_php_404(){
$request = parse_url($_SERVER["REQUEST_URI"]);
if($request['path'] == '/wp-login.php' && str_pos(wp_get_refer(),home_url( '/my-logout-page' )) !==0 ){
wp_safe_redirect(home_url('/404'));
}

 

第三步,根目录新建my-login-page,内容只需一行。

require_once('wp-login.php');

其实第三步还有一种是实现方式是类似于第二步的,通过wp_init判断请求地址,如果是my-login-page,则require wp-login.php,可以避免手动新建my-login-page文件。

通过以上三步就完成了wordpress登录地址的自定义。下一篇将介绍如何通过插件为管理员和非管理员指定不同的登录地址。

avatar