小站装修记录

发布于 2021-02-02  105 次阅读


网站一搭建好,我就开始规划网站需要优化改动的地方了,因为我觉着WordPress原生还是太“干吧”了。

具体的改动大概是分为两类:界面和安全

界面

1.主题

WordPress 5.6版本默认的主题是2021最新发布的【二〇二一】,这是可以说是WordPress的一个传统,每年发布一款以年份命名的官方主题。这款主题的风格是比较精简的,界面以浅绿色为主,字号的大小也是特别的显眼。

但按部就班的使用官方推出的主题显然不是我的风格,经过我的反复对比,最终我选择了这个同样是极简风格的主题——Adams,版本是1.4.26

2.草莓图标

在菜单栏添加一些图标确实让界面变得更加美观,Adams主题的作者引用了草莓图标。

图标代码图标代码
czs-home-lczs-book-l
czs-chemistry-lczs-rss
czs-bilibiliczs-github-logo
czs-weiboczs-nas

3.站点运行时间

站点运行时间这个内容从我最开始建站就开始使用,虽然说只是一个简简单单的计时代码,但把这段代码放在网站的下面,每次打开的时候都能看到时间的增加,心里真的会很有成就感。

<span id="runtime_span"></span>
<script type="text/javascript">
      function show_runtime(){
                            window.setTimeout("show_runtime()",1000);
                            X=new Date("02/02/2021 1:21:40");
                            Y=new Date();
                            T=(Y.getTime()-X.getTime());
                            M=24*60*60*1000;
                            a=T/M;
                            A=Math.floor(a);
                            b=(a-A)*24;
                            B=Math.floor(b);
                            c=(b-B)*60;
                            C=Math.floor((b-B)*60);
                            D=Math.floor((c-C)*60);
                            runtime_span.innerHTML="承蒙关照,小站已稳定运行"+A+"天"+B+"小时"+C+"分"+D+"秒"
                            }
     show_runtime();
</script>


安全

1.登录页面网站

因为我之前的几个网站也都是用的WordPress程序,几乎每个站都会遇到有人试图登录后台的情况,所以我现在对这方面格外重视,建好站的第一件事就是修改登录的后台网址。

【恩月阁】WordPress修改默认的后台地址

将代码添加至主题根目录下的functions.php文件的<?php下保存即可

//保护后台登录
add_action('login_enqueue_scripts','login_protection');  
function login_protection(){  
   if($_GET['word'] != 'admin')header('Location: https://www.9quick.top/');  
}

2.登陆页面算数验证

更改登陆页面网址只能算是第一道防线,不排除有哪个小可爱会用奇怪的算法机器人“蒙进”登录页,所以我又在登录页面添加了一个计算题验证,这玩意和阿里腾讯提供的人机滑块验证类似,只不过我这个是需要登陆者计算一道由系统随机生成的计算题。

将代码添加至主题根目录下的functions.php文件的<?php下保存即可

//后台登陆数学验证码
function myplugin_add_login_fields() {
    //获取两个随机数 
    $num1=rand(0,20);
    $num2=rand(0,40);
    //最终网页中的具体内容
    echo "<p><label for='math' class='small'>验证码</label><br /> $num1 + $num2 = ?<input type='text' name='sum' class='input' value='' size='25' tabindex='4'>"
    ."<input type='hidden' name='num1' value='$num1'>"
    ."<input type='hidden' name='num2' value='$num2'></p>";
}
add_action('login_form','myplugin_add_login_fields');

function login_val() {
    $sum=$_POST['sum'];//用户提交的计算结果
    switch($sum){
	//得到正确的计算结果则直接跳出
	case $_POST['num1']+$_POST['num2']:break;
	//未填写结果时的错误讯息
	case null:wp_die('错误: 请输入验证码.');break;
	//计算错误时的错误讯息
	default:wp_die('错误: 验证码错误,请重试.');
    }
}
add_action('login_form_login','login_val');

3.隐藏author页面地址

这东西说实话我也不是特别懂,只知道隐藏后对网站有好处~

author页面地址为 http://yoursite/?author=1 ID是自增的,请求这个地址会 301 到一个url,这个url里包含了作者的用户名。虽然不算漏洞,还是给了爆破者很大的便利。

将代码添加至主题根目录下的functions.php文件的<?php下保存即可

function my_author_link() {
    return home_url('/' );
}
add_filter('author_link','my_author_link');

4.禁用xmlrpc.php

xmlrpc.php这个文件给了我很深刻的印象,xmlrpc是WordPress中进行远程调用的API,其中就包含一个登录接口,而xmlrpc登录接口默认没有验证码,最大错误尝试次数限制等。在我之前的一个站,因为还不太懂xmlrpc这个东西,所以就没有采取禁用措施,这就导致我的那个网站在两天时间内被暴力破解了近千次

将代码添加至主题根目录下的functions.php文件的<?php下保存即可

//禁用xmlrpc
add_filter('xmlrpc_enabled', '__return_false');

5.restAPI

这个和第三条类似,会暴露用户的用户名,我也是直接选择了禁用。

将代码添加至主题根目录下的functions.php文件的<?php下保存即可

/*禁用未登录的用户*/
function rest_only_for_authorized_users($wp_rest_server) {
    if ( !is_user_logged_in() ) {
        wp_die('非法操作!');
    }
}
add_filter('rest_api_init', 'rest_only_for_authorized_users', 99);

6.防F5恶意刷新

众所周知,国内服务器价格昂贵,学生党普遍使用的是阿里或腾讯的学生机,这就导致我们放在学生机的站点很容易就会被F5刷新而“死”(由其是WordPress的动态页面)。

将代码添加至主题根目录下的functions.php文件的<?php下保存即可

//防止CC攻击
session_start(); //开启session
$timestamp = time();
$ll_nowtime = $timestamp ;
//判断session是否存在 如果存在从session取值,如果不存在进行初始化赋值
if ($_SESSION){
  $ll_lasttime = $_SESSION['ll_lasttime'];
  $ll_times = $_SESSION['ll_times'] + 1;
  $_SESSION['ll_times'] = $ll_times;
}else{
  $ll_lasttime = $ll_nowtime;
  $ll_times = 1;
  $_SESSION['ll_times'] = $ll_times;
  $_SESSION['ll_lasttime'] = $ll_lasttime;
}
//现在时间-开始登录时间 来进行判断 如果登录频繁 跳转 否则对session进行赋值
if(($ll_nowtime - $ll_lasttime) < 3){
  if ($ll_times>=5){
header("location:http://127.0.0.1");//可以换成其他链接,比如站内的404错误显示页面(千万不要用动态页面)
  exit;
  }
}else{
  $ll_times = 0;
  $_SESSION['ll_lasttime'] = $ll_nowtime;
  $_SESSION['ll_times'] = $ll_times;
}
//防cc结束

这段代码的原理就是记录访问者在一段时间内的访问(刷新)次数,一旦超过某个值就会将用户重定向到指定连接或ip