WordPress禁用指定endpoints,防止用户信息泄露

WordPress 在4.7.0版本之后将REST API插件集成到默认功能之中。REST API为WordPress的使用者提供了一个方便快捷的管理接口。在WordPress 4.7.0版本中,存在着一个越权漏洞,成功的利用这个漏洞,可以绕过管理员权限查看WordPress上所有发布过文章的用户信息列表。

虽然现在用的不是4.7.0这个版本,但是为了确保安全,最好还是把这两个rest api接口禁用掉吧。

禁用代码如下:

// language: php
// 禁用用户端点,同时确保其他 REST API 功能正常
add_filter('rest_endpoints', function ($endpoints) {
    if (isset($endpoints['/wp/v2/users'])) {
        unset($endpoints['/wp/v2/users']);
    }
    if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
        unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
    }
    return $endpoints;
});

PHP7.4 升级到 PHP8.1

由于 php7.4 马上结束维护了,所以把博客服务器 PHP 版本做了个升级,直接升级到当前的最新稳定版 PHP8.1。

升级,直接安装PHP8.1 即可。

PHP8.1 的安装命令如下:

apt install php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-curl php8.1-xml php8.1-imagick php8.1-zip php8.1-gd php8.1-intl php8.1-bcmath

安装完成后,顺便开启了 PHP8.1 的 JIT,以提高性能,开启方法如下:

编辑 php.ini,在 opcache 配置部分添加加粗的两行:

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=50M

保存后记得重启 php8.1-fpm。

参考链接:https://stitcher.io/blog/php-8-jit-setup

Hello, Laravel

经过一周的紧张开发,又一个面向银行的内部系统总算完成了。这个系统本来打算是用 .NET 来做,但这段时间一直心心念念 Laravel 框架,就像所有趁手好用的工具一样,只要用过一次,就忘不掉她的好。

经过简单分析,发现这个系统其实并没有复杂的业务和计算,由于是内部系统,也不存在高并发的可能,所以,对于 Laravel 是适用的。本来 .NET 开发的系统已经完成了 70% ,花了一周不到的时间就用 Laravel 重写完成了,不得不感慨开发速度之快,同时开发体验拉满。

这么多年来,虽说 PHP 也在断断续续的用,但从没怎么把它当回事,一般的项目主要还是使用 .NET 来做。对于自由开发者来说,.NET 可谓是相当的万金油,既可以做桌面开发,也可以做 Web 开发,关键时刻还可以拿来写一写安卓移动应用。由于是静态编译型语言,性能基本够用,配合 SQL Server 数据库,基本没有做不了的项目。

但是,自从知道 Laravel 框架后,就在慢慢地在不断了解,越了解就越被她的优雅所打动,这里我也用了优雅这个词,因为实在没有想到更好的词能描述那种感觉。直到去年,尝试用她开发了一个小项目,由于当时对 Eloquent 了解还不够深入,甚至多对多、一对多这种关系的用法还不太清楚,就强行上了,结果也还行,顺顺利利的开发完成。

这次的项目开发,在彻底弄清了 Eloquent 之后,就果断切换到 Laravel 来开发,真的是太好用了,再也不用定义 ASP.NET 里面的那一堆堆的实体类,再也不再需要 AutoMapper,再也不用那蹩脚的表单验证,再也不用等待编译生成,等等好处无法一一言说。总之就是开发轻量了,保存即生效,刷新即可看效果,整个过程轻松加愉快,身心愉悦!

当然,Laravel 并不是完美的,并不适用于所有场景,比如高并发场景,计算密集、IO密集型应用,对于这些场景和应用,Laravel 不是不能做,而是不够好,性能不够高!当然,这不能怪 Laravel,这是 PHP 的问题,什么时候等 PHP 进化出高性能的运行模式,那 Laravel 就是完美的。

最后,程序语言、程序框架始终是工具,只有根据需求和场景选择合适的工具才是真理。

后记:该项目最终使用ASP.NET Core重新开发,重业务的项目还是要使用强类型语言,懂得都懂,不解释。

VirtualBox 安装增强功能

首先通过菜单插入增强功能cd盘

然后执行

uname -r

查看内核版本,debian11为:5.10.0-15-amd64

然后执行:

apt-get install build-essential linux-headers-内核版本号

即:

apt-get install build-essential linux-headers-5.10.0-15-amd64

然后进入cdrom,执行:

sudo sh ./VBoxLinuxAdditions.run

安装完重启。

如果重启后debian窗口仍然无法自动变大,那么关闭虚拟机,进入虚拟机设置,把显存调到最大即可。

Laravel 9 安装中文语言包

首先使用 composer 安装依赖包:

composer require laravel-lang/publisher laravel-lang/lang laravel-lang/attributes --dev

注意 laravel-lang/publisher 这个包需要 php 8.1 版本才行,如果是 php 8.1 以下版本,要使用如下命令来安装旧版:

composer require laravel-lang/publisher:^13.0 laravel-lang/lang:^10.9 laravel-lang/attributes:^1.1

然后使用下面的命令把中文语言包添加到 lang 目录下:

php artisan lang:add zh_CN

最后修改配置文件 config/app.php,来使用中文。

'locale' => 'zh_CN',

注:本文基于 Laravel Framework 9.33.0 版本测试通过。

参考链接:

https://github.com/Laravel-Lang/lang

https://publisher.laravel-lang.com/installation/

解决 Debian vi 不能使用方向键的问题

在使用 Debian 时,发现通过 Vi 编辑文件时不能使用方向键,解决办法如下:

第一种方法:

在终端打开VI配置文件:vi ~/.vimrc

输入:set nocompatible

保存后,vi 就可以使用上下左右方向键了。

第二种方法:

安装 vim ,执行 sudo apt install vim,安装完成后,vi 命令就可以使用方向键了。

Debian 11 安装 Mariadb

安装

第一步,执行安装命令:

apt install -y mariadb-server

第二步,执行如下命令进行安全配置,该命令可以配置数据库密码等相关操作。

mysql_secure_installation

配置mariadb远程访问

通过如下命令授权 root 用户远程访问,xxxxx 是密码。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxxxxx';

然后进入 /etc/mysql/mariadb.conf.d,编辑 50-server.cnf。

注释掉下面的行(在前面加#)

bind-address            = 127.0.0.1

最后重启服务即可。

systemctl restart mysql 

提示:

由于mysql/mariadb配置文件有点多,如果找不到该配置在哪个文件里面,可以通过如下命令进行查找:

grep -r "bind-address" /etc/mysql/*

Debian11安装新版PHP

今天给一台国内的服务器重装了 debian 11 ,由于 debian 11 带的 php 版本是 7.4,有点老,所以我们可以使用 debian 开发者 Ondřej Surý 维护的 php 源 deb.sury.org 。具体用法如下:

首先,使用下面的命令安装所须的软件包:

apt install ca-certificates apt-transport-https software-properties-common -y

安装所须软件包后,使用以下命令将 Sury 存储库添加到 APT:

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list

然后,使用以下命令下载并添加 GPG 密钥:

wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add -

上述添加 GPG 密钥的命令会提示 Warning: apt-key is deprecated,但是可以执行成功,如果不想要报 Warning 可以换成下面的命令:

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

完成后,使用以下命令更新存储库:

apt update

到此,sury 源添加完成。

如果要安装 php 的最新版本,可以执行:

apt install php-fpm php-mysql php-mbstring php-curl php-dom php-imagick php-zip php-gd php-intl

如果要安装指定的版本,例如安装 php8.0,可以执行:

apt install php8.0-fpm php8.0-mysql php8.0-mbstring php8.0-curl php8.0-dom php8.0-imagick php8.0-zip php8.0-gd php8.0-intl

Debian11安装Postfix

为了能让 WordPress 发送通知邮件,需要在服务器上配置MTA(Mail Transfer Agent),常见的MTA服务有 Sendmail、Postfix 等。

Sendmail 是 Unix 系统的标准邮件传输代理,而 Postfix 邮件服务器安全性更好一些。

这里我们选择的是 Postfix,用来为 WordPress 提供仅发送服务。

安装

通过如下命令安装 Postfix

apt install postfix

安装过程中,会出现配置界面。如果已安装,可以使用 dpkg-reconfigure postfix 重新打开该界面。

我们将选择 Internet Site 并按回车。

对于系统邮件名称,我们将使用我们网站的域名,对于本站,就是 wujie.me 。

这两步配置完后,等待安装完成,WordPress 就可以发送通知邮件了。

其它配置

如果想对 Postfix 进行更详细的配置,可以配置文件 /etc/postfix/main.cf。

例如为了增强安全性,需要把 SMTP 服务改为只允许本地使用,那么可以把 inet_interfaces = all 改成 inet_interfaces = loopback-only

 

改完之后,需要重启 postfix 服务:

systemctl restart postfix

WordPress 网站根目录权限设置

在网站根目录下执行(针对debian/ubuntu,这俩系统的php-fpm用户名是www-data)

for directories

//language:bash
find . -type d -print0 | xargs -0 chmod 0755

for files

//language:bash
find . -type f -print0 | xargs -0 chmod 0644
//language:bash
chmod 600 wp-config.php
//language:bash
chown -R www-data:www-data *

如果wordpress站点健康检查提示无法自动更新,则执行下面这句,把当前文件夹也加入php-fpm用户组

//language:bash
chown -R www-data:www-data .