如何构建安全的 WordPress 2:隐藏登录失败时「未知用户名」和「密码不正确」错误信息
之前我们开启了如何构建安全的 WordPress 系列文章,并开启了第一篇:防止用户名暴露,我们通过 5 个地方的功能和代码,让 WordPress 登录名不会出现在任何页面上或者源代码中。
除此之外,其实还有一个地方还有可能让攻击者猜测到用户名是否正确,这个就是在登录界面,如果工具者使用暴力破解的方式尝试使用用户名的时候,WordPress 默认的错误信息,可以让攻击者获得正确的用户名。
默认情况下,在登录 WordPress 的时候,如果输入的用户名不存在,WordPress 会报「未知用户名」的错误:

如果用户名正确,密码错误的话,WordPress 会报「密码不正确」的错误:

这些错误提示信息可以让让攻击者知道快速定位用户名,确定了用户名,继续暴力破解获得密码就更加方便。
所以这些错误信息最好统一改成:「用户名或者密码错误」的错误信息,让攻击者猜去吧。
add_filter('wp_login_errors', function($errors){
$error_code = $errors->get_error_code();
if(in_array($error_code, ['invalid_username', 'invalid_email', 'incorrect_password'])){
$errors->remove($error_code);
$errors->add($error_code, '用户名或者密码错误。');
}
return $errors;
});
还是那句话,安全是最重要的,所以一定要重视,除了防止用户名暴露,隐藏可以让攻击者确定用户名的错误信息是非常好的安全措施。
WPJAM 用户管理插件 已经集上面所有的功能和相关代码,直接启用即可,点击查看 WPJAM 用户管理插件的详细介绍,Modular 主题也集成了,我会在介绍 WordPress 安全这系列文章的时候,将这些安全相关代码也整合到 Modular 主题中,争取打造最安全的 WordPress 主题。
专题:WordPress 安全: