十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
越来越多的网站支持添加二步认证Two-Factor Authentication以提高安全性,在国内更多是以账号密码+短信码的方式,但海外网站可能更多采用二步认证的方式。
成都创新互联一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!为您提供网站设计、成都网站建设、成都网页设计、成都小程序开发、成都网站开发、成都网站制作、成都软件开发、成都app软件开发公司是成都本地专业的网站建设和网站设计公司,等你一起来见证!
如果你觉得有必要为你的WordPress网站开启二步认证,则可以继续阅读本教程,了解如何使用Google Authenticator或者SMS短信验证码为WordPress添加Two-Factor Authentication。
为什么要为WordPress登录添加二步验证?
黑客使用的最常见的技巧之一称为暴力攻击。通过使用自动化脚本,黑客会尝试猜测正确的用户名和密码以攻入WordPress 网站。
如果他们窃取了密码或准确猜到了密码,则他们可能会用恶意软件感染您的网站,比如挂马、加密数据要挟。
保护WordPress网站免遭密码被盗的最简单方法之一是添加二步认证。这样,即使有人窃取了密码,他们无法跳过使用手机输入安全代码才能访问的步骤。
有多种方法设置WordPress二步认证登录。但是,最安全、最简单的方法是使用身份验证器应用程序。
方法 1. 使用WP 2FA插件添加二步认证(更简单的方法)
方法 2. 使用Two Factor插件添加二步认证
方法 1. 使用WP 2FA插件添加二步认证
这种方法最为简单,推荐大家首选此方法。这个方法很灵活,允许您对所有用户强制执行二步身份验证。
首先,您需要安装并启用WP 2FA – Two-factor Authentication插件。
启用后,您需要访问用户»您的个人资料页面并向下滚动到“WP 2FA Settings”部分。
点击“Configure Two-factor authentication (2FA)”按钮以启动设置向导。
插件将要求您选择一种身份验证方法:
使用您选择的应用程序生成的One-time code(推荐)
通过电子邮件发送给您的One-time code
建议您选择app方式认证,更安全可靠。然后单击下一步按钮继续。
该插件将向您展示一个二维码,您需要使用身份验证器应用(authenticator app)扫描该二维码。
什么是身份验证器应用(Authenticator App)?
身份验证器应用是一种智能手机应用程序,可为您保存在其中的帐户生成一个临时的一次性密码。
基本上,应用和您的服务器使用密钥来加密信息并生成一次性代码,您可以将其用作第二层保护。
有很多这样的应用可以免费使用。
最受欢迎的是Google Authenticator,但它并不是最好的。虽然它工作得很好,但它不提供可以在手机丢失时使用的备份。
我们建议使用Authy,因为它是一个易于使用且免费的应用程序,该应用还允许您以加密格式将您的帐户保存在云中。这样,如果您丢失了手机,则只需输入主密码即可恢复所有帐户。
其他密码管理器(如LastPass、1password等)都带有自己的身份验证器版本,它们都比Google身份验证器要好用得多,因为它们支持恢复密钥。
在本教程中,我们将使用Authy作为示例。
首先,单击身份验证器应用程序中的添加帐户按钮:
然后,该应用程序将请求访问您手机上的相机的权限。您需要允许此权限,以便您可以扫描插件设置页面上显示的二维码。
身份验证器应用现在将保存您的网站帐户,并开始显示可用于登录的一次性密码。
在插件的设置向导中,单击“I’m Ready”按钮继续。
该插件现在会要求您验证一次性密码。只需在身份验证器应用中单击您的帐户,它就会显示一个六位数的一次性密码,输入该密码。
之后,该插件将为您提供生成和保存备份代码的选项。如果您无法使用手机,则可以使用这些代码。您可以打印这些备份代码并将它们保存在安全的地方。
之后,您可以退出设置向导。
为所有WordPress用户设置WP 2-FA两步认证登录
如果您运行多用户WordPress网站,例如会员网站,则该插件还允许您为网站上的所有用户启用或强制执行二步认证登录验证。
只需转到设置»Two-factor Authentication页面即可配置插件设置。
该插件支持为所有用户启用二步认证登录,强制所有用户登录,并给用户足够的时间进行设置。
如果您的WordPress网站使用自定义登录表单页面,那么您还可以创建一个自定义页面,用户无需访问WordPress管理后台即可在其中管理其二步认证身份验证器设置。
不要忘记单击“保存更改”按钮来存储您的新设置。
以下是用户输入常规WordPress密码后,WordPress默认登录界面要求输入二步认证身份验证代码。
方法 2. 使用Two Factor插件添加二步认证
这种方法不太灵活,因为该插件不支持为所有用户强制执行两步认证登录。每个用户都必须自己设置,并且可以从他们的个人资料中禁用它。
首先,您需要安装并启用Two Factor插件。
启用插件后,访问用户»个人资料页面并向下滚动到Two-Factor Options部分。
从这里,您需要选择一个二步认证登录选项。该插件支持使用电子邮件、身份验证器应用和FIDO U2F安全密钥方法。
我们建议使用身份验证器应用方法。只需下载Google Authenticator、Authy 或 LastPass Authenticator等身份验证器应用,然后扫描屏幕上显示的二维码。
扫描二维码后,应用程序将向您显示验证码,您需要在插件选项中输入该验证码,然后单击提交按钮。
该插件现在将设置密钥。您可以随时从设置页面重置此密钥以重新扫描二维码。
不要忘记单击“Update Profile”按钮以保存您的设置。
现在,每次您登录WordPress网站时,系统都会要求您输入手机上应用生成的验证码。
关于WordPress中二步认证 (2FA) 的常见问题
以下是有关在WordPress中使用两步认证登录的一些常见问题的解答。
1. 如果无法访问手机,如何登录?
如果您使用的是带有Authy等云备份选项的身份验证器应用,那么您也可以在笔记本电脑上安装该应用程序。
即使没有随身携带手机,您可以访问身份验证代码。它还支持在购买新手机时恢复您的密钥。
上面提到的两种方法还支持您生成备份代码。当您无法使用手机时,这些代码也可用作一次性密码。
2. 如何不用密码登录?
如果您无权访问手机、笔记本电脑或备用代码,则只能通过禁用该插件来登录。
停用所有插件后,它还将禁用二步身份验证插件,您将能够登录到您的WordPress网站。登录后,您可以重新启用插件并重置二步身份验证设置。
3. 我还需要密码保护WordPress管理文件夹吗?
从使用HTTPS和安全WordPress托管等基础知识开始,当您拥有多层安全保护来保护您的网站时,网站安全效果最佳。二步认证的主要目的是加强WordPress登录安全,但您可以通过密码保护WordPress管理后台使其更加安全。
如果的WordPress网站是一个会员网站、在线商店或在线课程网站,就更应该做二步认证登录。
关于WordPress安全,建议大家可以阅读“如何有效地保护您的WordPress站点免受攻击入侵”和“WordPress网站免费SSL证书申请及配置教程”,来进一步完善WordPress安全防护措施。
原创文章,作者:微想小云,如若转载,请注明出处:
Wordpress下载Wordpress主机推荐Wordpress使用心得Wordpress怎么建站Wordpress插件Wordpress虚拟主机Wordpress问题解决
赞 (0)
生成海报
如何有效地保护您的WordPress站点免受攻击入侵
上一篇2022年 9月 24日 am8:13
如何正确地删除WordPress
一。研究wordpress时wordpess的密码密码生成与登录密码验证方式很重要
WordPress密码已成为整合的首要目标,如何征服整合,就得了解WordPress密码算法。
WordPress系统的用户密码是保存在wp_users数据表的user_pass字段,密码是通过Portable PHP password hashing framework类产生的,密码的形式是随机且不可逆,同一个明文的密码在不同时间,产生的密文也不一样,相对来说较为安全。
二。密码生成方式
随机产生一个salt 并将salt和password相加
进行了count次md5 然后和encode64的hash数值累加
最后得到一个以$P$开头的密码,这个密码每次产生的结果都不一样
以下为在wordpress中调用密码生成的代码
[php] view plain copy print?
?php
$password = 'abc';
global $wp_hasher;
if ( empty($wp_hasher) ) {
require_once( './wp-includes/class-phpass.php');
$wp_hasher = new PasswordHash(8, TRUE);
}
echo $wp_hasher-HashPassword($password);
?
三。wordpress密码生成与登录验证
wordpress中位置为\wp-includes\class-phpass.php
以下是wordpress中生成密码的代码直接运行可查看密码的生成以及验证过程
[php] view plain copy print?
?php
class PasswordHash {
var $itoa64;
var $iteration_count_log2;
var $portable_hashes;
var $random_state;
function PasswordHash($iteration_count_log2, $portable_hashes)
{
$this-itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
if ($iteration_count_log2 4 || $iteration_count_log2 31)
$iteration_count_log2 = 8;
$this-iteration_count_log2 = $iteration_count_log2;
$this-portable_hashes = $portable_hashes;
$this-random_state = microtime() . uniqid(rand(), TRUE); // removed getmypid() for compability reasons
}
function get_random_bytes($count)
{
$output = '';
if ( @is_readable('/dev/urandom')
($fh = @fopen('/dev/urandom', 'rb'))) {
$output = fread($fh, $count);
fclose($fh);
}
if (strlen($output) $count) {
$output = '';
for ($i = 0; $i $count; $i += 16) {
$this-random_state =
md5(microtime() . $this-random_state);
$output .=
pack('H*', md5($this-random_state));
}
$output = substr($output, 0, $count);
}
return $output;
}
function encode64($input, $count)
{
$output = '';
$i = 0;
do {
$value = ord($input[$i++]);
$output .= $this-itoa64[$value 0x3f];
if ($i $count)
$value |= ord($input[$i]) 8;
$output .= $this-itoa64[($value 6) 0x3f];
if ($i++ = $count)
break;
if ($i $count)
$value |= ord($input[$i]) 16;
$output .= $this-itoa64[($value 12) 0x3f];
if ($i++ = $count)
break;
$output .= $this-itoa64[($value 18) 0x3f];
} while ($i $count);
return $output;
}
function gensalt_private($input)
{
$output = '$PXXXXX;
$output .= $this-itoa64[min($this-iteration_count_log2 +
((PHP_VERSION = '5') ? 5 : 3), 30)];
$output .= $this-encode64($input, 6);
return $output;
}
function crypt_private($password, $setting)
{
$output = '*0';
if (substr($setting, 0, 2) == $output)
$output = '*1';
$id = substr($setting, 0, 3);
# We use "$P{1}quot;, phpBB3 uses "$H{1}quot; for the same thing
if ($id != '$PXXXXX $id != '$HXXXXX)
return $output;
$count_log2 = strpos($this-itoa64, $setting[3]);
if ($count_log2 7 || $count_log2 30)
return $output;
$count = 1 $count_log2;
$salt = substr($setting, 4, 8);
if (strlen($salt) != 8)
return $output;
# We're kind of forced to use MD5 here since it's the only
# cryptographic primitive available in all versions of PHP
# currently in use. To implement our own low-level crypto
# in PHP would result in much worse performance and
# consequently in lower iteration counts and hashes that are
# quicker to crack (by non-PHP code).
if (PHP_VERSION = '5') {
$hash = md5($salt . $password, TRUE);
do {
$hash = md5($hash . $password, TRUE);
} while (--$count);
} else {
$hash = pack('H*', md5($salt . $password));
do {
$hash = pack('H*', md5($hash . $password));
} while (--$count);
}
$output = substr($setting, 0, 12);
$output .= $this-encode64($hash, 16);
return $output;
}
function gensalt_extended($input)
{
$count_log2 = min($this-iteration_count_log2 + 8, 24);
# This should be odd to not reveal weak DES keys, and the
# maximum valid value is (2**24 - 1) which is odd anyway.
$count = (1 $count_log2) - 1;
$output = '_';
$output .= $this-itoa64[$count 0x3f];
$output .= $this-itoa64[($count 6) 0x3f];
$output .= $this-itoa64[($count 12) 0x3f];
$output .= $this-itoa64[($count 18) 0x3f];
$output .= $this-encode64($input, 3);
return $output;
}
function gensalt_blowfish($input)
{
# This one needs to use a different order of characters and a
# different encoding scheme from the one in encode64() above.
# We care because the last character in our encoded string will
# only represent 2 bits. While two known implementations of
# bcrypt will happily accept and correct a salt string which
# has the 4 unused bits set to non-zero, we do not want to take
# chances and we also do not want to waste an additional byte
# of entropy.
$itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$output = '$2aXXXXX;
$output .= chr(ord('0') + $this-iteration_count_log2 / 10);
$output .= chr(ord('0') + $this-iteration_count_log2 % 10);
$output .= 'XXXXX;
$i = 0;
do {
$c1 = ord($input[$i++]);
$output .= $itoa64[$c1 2];
$c1 = ($c1 0x03) 4;
if ($i = 16) {
$output .= $itoa64[$c1];
break;
}
$c2 = ord($input[$i++]);
$c1 |= $c2 4;
$output .= $itoa64[$c1];
$c1 = ($c2 0x0f) 2;
$c2 = ord($input[$i++]);
$c1 |= $c2 6;
$output .= $itoa64[$c1];
$output .= $itoa64[$c2 0x3f];
} while (1);
return $output;
}
function HashPassword($password)
{
$random = '';
if (CRYPT_BLOWFISH == 1 !$this-portable_hashes) {
$random = $this-get_random_bytes(16);
$hash =
crypt($password, $this-gensalt_blowfish($random));
if (strlen($hash) == 60)
return $hash;
}
if (CRYPT_EXT_DES == 1 !$this-portable_hashes) {
if (strlen($random) 3)
$random = $this-get_random_bytes(3);
$hash =
crypt($password, $this-gensalt_extended($random));
if (strlen($hash) == 20)
return $hash;
}
if (strlen($random) 6)
$random = $this-get_random_bytes(6);
$hash =
$this-crypt_private($password,
$this-gensalt_private($random));
if (strlen($hash) == 34)
return $hash;
# Returning '*' on error is safe here, but would _not_ be safe
# in a crypt(3)-like function used _both_ for generating new
# hashes and for validating passwords against existing hashes.
return '*';
}
function CheckPassword($password, $stored_hash)
{
$hash = $this-crypt_private($password, $stored_hash);
if ($hash[0] == '*')
$hash = crypt($password, $stored_hash);
return $hash == $stored_hash;
}
}
//原始密码
$passwordValue = "123456";
//生成密码
$wp_hasher = new PasswordHash(8, TRUE);
$sigPassword = $wp_hasher-HashPassword($passwordValue);
echo "生成的密码为:".$sigPassword;
echo "\n";
//验证密码
$data = $wp_hasher-CheckPassword($passwordValue,$sigPassword);
if($data){
echo '密码正确';
}else{
echo '密码错误';
}
?
此为一个wordpres密码生成与登录验证实例,其中HashPassword为生成密码,CheckPassword为验证密码
itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 为以上提到的生成salt的基础字符串。
备注:由于csdn代码显示插件对特殊字符的限制。 请将以上代码中 XXXXX替换为 $' 注意有单引号,代码中一共有5处
有时候在登录Wordpress时报错:随机数校验失败,或者认证失败等等。其实,这是WordPress的随机数和缓存导致的问题。其实就是其中一个人把登录页面缓存了,而缓存时间已经超过12个小时。Wordpress默认随机数nonce时间在12-24小时之内就会失效。只能清空缓存才能再次正常登陆。接下来搬主题就分享一下加大WordPress的随机数nonce过期时间解决缓存过期错误问题。
针对上面的问题,要么清空登录页面的缓存,要么把WordPress随机数nonce有效时间改成48小时,网页缓存(WP Super Cache等缓存插件)时间改成24小时。
实际上,WP会为那些涉及安全问题的地方,比如ajax加载之类,会提供一个随机数,每个用户不同。而这个随机数有个有效期,默认为24小时。事实上,按照WP官方描述,这个时间上是12-24小时之间,随机失效。所以,当使用各类WordPress缓存插件缓存页面超过12小时,这个随机数就有可能失效,直接导致认证失败,登陆失败等问题。