利用腾讯云搭建wordPress个人站(四)

续接上一篇,本编之后都是对wordPress站点进行的额外配置,选择喜好看个人了。

首先,重要的话说三遍:

保证wordPress版本最新,插件,主题最新才是重中之重!

保证wordPress版本最新,插件,主题最新才是重中之重!

保证wordPress版本最新,插件,主题最新才是重中之重!

这里本篇推荐一些配置用来增加wordPress的安全性,以尽量减少插件的使用来做。这里推荐一个本地远程工具,wpscan来在云主机上对系统安全性进行扫描。

安装wpscan

确认系统上已经安装了ruby。远程连接到自己的云主机。首先添加个人用户的ruby环境。执行命令:

代码语言:shell
复制
vim ./.bashrc

在文件末尾添加两行:

代码语言:shell
复制
export GEM_HOME="$(ruby -e 'puts Gem.user_dir')"
export PATH="$PATH:$GEM_HOME/bin"

保存退出后,开始安装wpscan。执行命令:

代码语言:shell
复制
sudo apt install ruby-dev
gem install --user-install wpscan

等待安装完成后,去官网根据提示注册账号,可以申请一个api Token,用来显示扫描结果。使用前确认系统在线,即可开启扫描。可以执行下述命令确认系统在线(本地回环):

代码语言:javascript
复制
curl -X GET -i http://127.0.0.1

第一次使用记得更新wpscan,之后再进行扫描

代码语言:javascript
复制
wpscan --update
wpscan --url http://127.0.0.1 --api-token YOUR_TOKEN

把其中的YOUR_TOKEN修改为自己的TOKEN。

针对扫描结果进行修改:1. 隐藏登录界面

这里首先隐藏自己的登录界面。在自己的后台,依次打开工具->主题文件编辑器,在右侧编辑栏选择模板函数,在最下面添加:

代码语言:php
复制
// Redirect WP-Login.php
add_action('login_enqueue_scripts','tb_wp_login_protection');
function tb_wp_login_protection(){
    if( !isset($_GET['12345']) ){
        header( 'Location: ' . home_url() );
        exit;
    }
}

其中,12345更换为自己喜欢的字符串。这样直接访问wp-login.php会被跳转到主页,而真正后台页面地址为wp-login.php?12345。

针对扫描结果进行修改:2. 限制对部分文件的访问

主要用来限制对xmlrpc.php以及wp-cron.php的直接访问。

注意:如无法更新wordpress版本请取消对wp-cron.php的屏蔽。

执行命令:

代码语言:shell
复制
vim /etc/nginx/sites-available/default

在service_name 行下面添加:

代码语言:javascript
复制
location ~* /xmlrpc.php{
    allow 127.0.0.1;
    return 403;
}

location ~* /wp-cron.php{
allow 127.0.0.1;
return 403;
}

保存后并执行:

代码语言:shell
复制
sudo nginx -t

确认配置文件正确,并重新加载Nginx

代码语言:shell
复制
sudo systemctl reload nginx

针对扫描结果进行修改:3. 隐藏版本信息

同第一条,在模板函数末尾,添加:

代码语言:php
复制
// remove version from head
remove_action('wp_head','wp_generator');

// remove version from rss
add_filter('the_generator','__return_empty_string');

// remove verion from script and styles
function remove_version_from_wordpress($src){
if(strpos($src,'ver=')){
src = remove_query_arg('ver',src);
}
return $src;
}
add_filter('style_loader_src','remove_version_from_wordpress');
add_filter('script_loader_src','remove_version_from_wordpress');

保存退出即可。此条只能从访问发送的数据中尽可能隐藏版本信息,但仍然能使用wpscan扫描得到版本信息。如需要增加反wpscan的扫描,需要配置自己的防火墙,也可以询问自己的服务提供商。