WordPress隐藏前台登录用户名

最近在查看Limit Login Attempts日志的时候,发现大量的登陆尝试,关键是登陆使用的用户名是正确的。感到很奇怪,用户名是如何泄漏的呢?

网上搜寻了一下,发现原来用户名是被WordPress主动泄漏出来的。

WordPress鼠标点击前台用户名,浏览器就会跳转到 https://www.mobibrw.com/author/username 这个链接,这样一来就直接暴露了登陆用户名,哪怕你已经在前台使用了昵称。这是个很大的安全隐患!

后台登陆用户名也可以这样查看到:https://www.mobibrw.com/?author=1,多用户的可以把 1 变为 2、3、4、5 等,就可以在地址栏查看到各个用户名。

为了避免暴露登陆用户名,我们需要配置禁止用户名显示。我们需要在当前使用的主题的functions.php中增加如下函数

参考链接


WordPress中判断用户是不是管理员

自定义WordPress插件的时候,需要判断当前用户的角色是不是网站管理员,如果是管理员的情况下才允许使用插件功能,否则禁止使用。

对于自定义主题的情况,可以使用如下代码:

对于自定义插件的情况,可以使用如下代码:

更简单的代码如下:

参考连接


Synology(群晖)常见的配置项以及命令项

Apache2.2 相关配置与常见命令

Apache2.4 相关配置与常见命令

Nginx相关配置与常见命令

Web Station 相关配置与常见命令

继续阅读Synology(群晖)常见的配置项以及命令项

WordPress修改数据库返回数据

有个简单需求,就是 WordPress 多个网站同步数据的情况下,根据网站域名的不同,修改数据库返回的数据。

实现这个的需求就是在当前 WordPress 主题下的 functions.php 中实现 the_post 拦截函数,在数据库返回的数之后,进行替换。

例子如下:

这个替换过程只能针对没有使用 WP Super Cache 进行缓存的情况,如果已经使用 WP Super Cache 进行缓存,那么很可能导致没有及时生效。

如果只是需要替换域名,那么只需要在 wp-config.php 中定义 WP_HOME/WP_SITEURL 两个变量即可实现域名覆盖。

示例参考代码如下:

参考链接


阿里云从ubuntu16.04.5升级到ubuntu 18.04.3后调整PHP 7.0到PHP 7.2

目前使用的阿里云服务器是通过参考 阿里云ECS ubuntu 14.04.5 LTS升级到ubuntu 16.04.2 LTS 升级上来的。

升级之后,默认情况下,依旧使用的是 ubuntu 16.04.5 自带的 PHP 7.0 ,然而 ubuntu 18.04.3 系统自带的是 PHP 7.2 。我们希望在升级之后的系统上,能启用比较新版本的 PHP 7.2

其实更关键的是,在 ubuntu 18.04.3 系统上, PHP 7.0 相关的部分附加组件,比如 PHP7.0-CURL 已经没办法通过源安装了 ,安全补丁相关的更新估计也不能及时提供。另外就是较新版本的 PHP 7.2 在性能上有不错的提升。

执行如下切换命令(PHP-FPM模式):

网站响应速度有明显的提升,以前的卡顿表现明显改善。

参考链接


代码实现WordPress评论回复自动发邮件的功能

评论邮件通知的方法:

对于服务器上需要使用SMTP验证的,需要使用PHPMailer替代默认的WordPress默认的Mail发送邮件时配置SMTP相关信息,如下:

1.所有回复都发送邮件通知

登陆博客后台,点击“外观”选项卡下的“编辑”选项进入主题编辑界面,在functions.php文件中的<?php和?>之间添加以下函数即可:

2.让访客自己选择是否邮件通知

在functions.php文件中的<?php和?>之间添加以下函数,该函数将会在评论框底部生成要不要收回复通知的选项(与主题有关)

3.让博客管理员决定什么情况下发邮件

继续阅读代码实现WordPress评论回复自动发邮件的功能

关于WordPress中提示has_cap的问题

WordPress 中不同用户等级拥有不同的操作权限,这给我们的网站安全提供了很大的保障。在 WordPress 2.0 以前,WP 插件中使用数字(用户等级)来标识不同的权限级别。这显然让程序的可阅读性大打折扣。所以从 WordPress 2.0 开始就启用了新的权限标识符号,使用有具体含义的英文字符串,同时保留原来的那一套表示方法。很多插件作者并没有采用新的权限表示方式,因而在开启 WordPress 的调试模式后,用户会看到警告。

>英文版本的警告类似于,

为了安全,上面的语句中隐去了绝对路径而代之以省略号。

中文版本的警告类似于,

可以看到,只是“不建议”,并不是完全不能用了。

要解决这个问题,只需要将插件(也许还包括某些主题)中用到的权限声明的表示方式替换为新的方式就可以了。

1. 定位需要改写的语句

首先要定位到需要改写的语句,这是个比较麻烦的任务。

从上面的警告信息中并不能直接知道是哪个文件调用了 functions.php 中的 has_cap 函数。所以这里只是给个思路,无法给出明确的方法。

对于插件,一般是因为插件需要在 WordPress 的管理后台创建插件的设置页面时进行权限声明的。比如在 WordPress Revision 插件中遇到的情况就是这样。出现这种情况的标志性语句是,

只要在插件源文件中搜索 add_options_page 关键词即可定位。

如果不是这种情况,那就可以挨个儿禁用 WP 中的插件,同时刷新页面以确定是否是当前插件造成的。如果恰好发现该警告信息不再提示了,就说明是当前的插件。然后在该插件的源文件中去找相关的语句。

另外,还可以通过在 WP 后台中操作时出现错误提示的路径信息来缩小检查范围。如果有什么需要,可以留言咨询。

2. 改写表达方式

如果定位到了出问题的 PHP 语句,改写表达方式就很简单了。下面一节介绍了 WordPress 中新旧角色权限表达方式的对比。只需要将原来的表示用户级别的数字改成新的表示权限的字符串就可以了。

例如,原来的 PHP 语句为,

该语句因为要在 WordPress 后台添加一个插件的“选项”页面,因而需要用到 WordPress 中的第 8 级权限。查到对应的新的权限字符串为 'manage_options'。对应修改为,

只需要改其中那个数字 8,别的不需要动。

应该注意的是,根据 PHP 的规则,传递的参数如果是整型数字,可以不用加单引号,但是改成字符串之后,我们需要用英文半角的单引号将该字符串包起来。

3. 新旧权限表示方式对照

WordPress Codex 中有关于旧版本数字式用户级别和新的字符串式权限声明的详细说明可供参考。

在数字式用户级别页面的 3.12 User Level Capability Table 表格中列出了 11 个用户级别对应的权限。而在字符串式权限声明页面中 3.8 Capability vs. Role Table 一节里列举了所有权限字符串所代表的权限级别(对应于超级管理员、管理员等)。

原先的数字式级别与新的字符串式权限之间并不是一一对应的。具体应该将数字换成哪个字符串需要仔细斟酌。可能还需要根据在本文第 1 小节中定位出的 PHP 语句来辅助判断。原则上,权限在够用的前提下越小越好

例如,前面的例子中需要增加 options 页面,那肯定是管理员级别的权限。增加 options 页面的目的就是保存该插件的设置信息,这些信息是需要写入到 WordPress 数据库的 options 表中的。所以,可以确定为 manage_options 这个字符串。

在 Capabilities 一节中详细解释了各个字符串所代表的操作权限的范围。而在 User Levels 一节中则给出了旧式数字用户等级所对应的权限范围,方便缩小查找权限字符串的范围。8-10 级对应于管理员,3-7 级对应于编辑,2 级是作者,1 级是贡献者,0 级是权限最低的订阅者。

参考链接


关于 WP 中提示 has_cap 的问题

WordPress插件的语言国际化

调试的时候,通过在 wp-config.php 中定义 define('WPLANG', 'zh_CN');  来切换语言类型。

参考链接


Gettext po文件编辑器

Gettext 是一个非常老牌和成熟的国际化和本地化解决方案,在 Linux 下几乎每个 GNU 程序中都能见到 Gettext 的身影。在 Gettext 中,每个 locale 对应一个 po 文件,虽说 po 文件是纯文本,但是如果用普通的文本编辑器来编辑是非常麻烦的。

正好这两天国际化 ,搜到了几个 Linux 下的 po 编辑器~,推荐 GtranslatorWordPress 翻译( i18n )的时候使用这些工具。

macOS 下安装如下命令:


继续阅读Gettext po文件编辑器

WordPress文章内容加上TTS语音朗读

浏览一些博客的时候是否有看到过在内容上面有可以选择语音朗读功能,看着感觉还是蛮炫酷的。尤其是移动端的网站阅读体验比较好,比如一些内容教程、小说类型的网站可以使用这样的功能。

这里我们一般是使用的是百度提供的TTS(Text To Speech)文本到语音功能。

如下是实现这个基本功能的插件实现的代码。如下:

这里我们将代码添加到WordPressplugins目录下的SpeakIt目录下。

里面有两个按钮play.png,pause.png,需要存放到SpeakIt插件的images目录下:

 

 

参考链接