计算机中有一种黑客攻击手段叫brute-force attack,其意思就是:暴力攻击,或暴力破解。它指黑客用一种试错(trial and error)的方法,以大量的可能的密码组合来猜测某个系统或用户的密码,试图找到正确的答案。
暴力攻击是最简单和最不复杂的黑客攻击方法之一。顾名思义,暴力攻击远非微妙。这种攻击背后的理论是,如果您尝试无数次来猜测密码,那么您最终肯定是正确的。
攻击者旨在通过尝试猜测用户名/电子邮件和密码来强制访问用户帐户。通常,其背后的动机是利用被破坏的帐户执行大规模攻击、窃取敏感数据、关闭系统或三者兼而有之。
创建执行此类攻击的代码不需要太多的想象力或知识,甚至还有广泛可用的自动化工具,每秒提交数千次密码尝试。
可以通过修改 .htaccess 登录的形式向您的 wp-login.php 页面添加服务器端保护,这是保护您的 WordPress 网站免受黑客和暴力攻击的简单方法,
随着 WordPress 变得越来越流行,WordPress网站已经成为很多黑客的更大目标,这些黑客试图通过对 WordPress 登录页面运行字典攻击来闯入 WordPress 网站的管理页面。
如何鉴定一个攻击是暴力攻击 ?
暴力攻击很容易识别和调查。您可以通过查看 Apache 访问日志或 Linux 日志文件来检测它们。攻击会留下一系列不成功的登录尝试,如下所示:
Sep 21 20:10:10 host proftpd[25197]: yourserver (usersip[usersip]) - USER theusername (Login failed): Incorrect password.
锁定帐户可以防止暴力攻击吗?
在一定数量的错误密码尝试后锁定帐户是处理暴力尝试的常见做法。不幸的是,仅此一点并不总是足够的。
黑客可以通过在数千台服务器上尝试一个密码来发起大规模攻击。与在单个服务器上尝试多个密码不同,这种方法不会触发帐户锁定,并且巧妙地绕过了这种防御机制。
例如,如果服务器经常受到攻击,数百个用户帐户可能会不断被锁定。您的服务器很容易成为拒绝服务的牺牲品。
什么是字典攻击?
字典攻击是一种用于破坏受密码保护的计算机或服务器的计算机安全性的技术或方法。 字典攻击试图通过将字典中的每个单词系统地输入为密码或试图确定加密消息或文档的解密密钥来破坏认证机制。字典攻击通常很成功,因为许多用户和企业都使用普通单词作为密码。 这些普通单词可以在诸如英语词典之类的词典中轻松找到。
黑客使用程序或脚本自动尝试使用他们知道或猜测的用户名以及从列表生成的密码登录到您的站点。当他们无法登录时,脚本会使用列表中的下一个密码再次尝试。
在计算机系统中验证用户身份的最常见方法是通过密码。 此方法可能会持续数十年,因为它是验证用户身份的最方便,最实用的方法。 但是,这也是最弱的身份验证形式,因为用户经常使用普通单词作为密码。 诸如黑客和垃圾邮件发送者之类的敌对用户通过使用字典攻击来利用这一弱点。 黑客和垃圾邮件发送者尝试通过尝试所有可能的密码直到找到正确的密码来登录计算机系统。
针对字典攻击的两种对策包括:
- 延迟的响应:服务器的轻微延迟的响应可以防止黑客或垃圾邮件发送者在短时间内检查多个密码。
- 帐户锁定:几次尝试失败后锁定帐户(例如,三到五次尝试失败后自动锁定)可防止黑客或垃圾邮件发送者检查多个密码来登录。
字典攻击对使用多字密码的系统无效,对于使用小写字母和大写字母与数字组合的随机排列的系统,字典攻击也无效。
上述策略可以通过wordpress网站自带的插件(All-in-ONE Security)实现。
如果我使用强密码,我可以安全吗?
如果您使用的是好的、强密码,这是应该的,但这只是增加了攻击难度而已,持续不断的进攻会让你的服务器负荷加重。
每次有人尝试登录时,您的站点及其托管的服务器都必须正常工作,如果您的站点是自动攻击的对象,他们每分钟甚至每秒尝试多次登录,它可能会导致服务器为了处理大量的登录请求而加重CPU负担。
因此,我们将使用 .htaccess 以一种不会导致太多服务器负载的方式评估登录尝试。
WordPress login页面是如何工作的?
从技术上讲,当您的 WordPress 网站上的任何页面收到请求时,该请求都会到达 Web 服务器,然后 Web 服务器会将请求传递给 WordPress 进行处理。任何页面都会发生这种情况,包括您的 WordPress 登录名。
当访问者尝试登录您的 WordPress 网站时,会发生以下情况:
- 当用户要求登录时,进入页面 yoursite/wp-login.php 或 yoursite/wp-admin
- 服务器把该要求传送网站WordPress, 进而将导引到yoursite/wp-login.php页面
- 用户输入用户名和密码并点击登录
- WordPress将解析用户名密码是不是合法的
- 如果用户名密码合法,WordPress将用户导入用户或管理员页面,如果非法,将告诉用户登录无效
虽然上述步骤本身对服务器来说并没有什么负担,但想象一下,如果您有 1000 个人试图同时登录您的网站,甚至每秒都尝试登录 – 服务器可能会不堪重负并花费大量时间当它可以使用资源为网站提供服务时,它会处理虚假的登录请求。
因此,如果想降低服务器负荷,最好阻止访问者在访问 WordPress 之前使用服务器生成的登录信息,以确保他们是合法的。如果他们无法通过服务器的登录页面,他们将永远无法进入 WordPress 登录页面,因为不需要加载 WordPress 来评估密码,因此在服务器上更容易且降低服务器负荷。
利用隐藏文件.htaccess 保护文件wp-login.php和目录wp-admin
现在利用隐藏.htaccess文件保护用户在进入WordPress之前利用服务器验证用户登录信息。有三个基本步骤:
- 创建一个隐藏的密码文件。
- 生成登录名和密码并将其添加到隐藏密码文件中。
- 修改您网站的 .htaccess 文件在用户登录 WordPress 之前提供隐藏密码。
第 1 步 – 创建隐藏密码文件
在站点的根目录中,创建一个名为 .wp-admin 的文件,该文件将创建新的隐藏的用户名和密码凭证。该文件也可以命名为其他名称,但我们建议您在文件名的开头加上句点,以便默认隐藏。
第 2 步 – 生成登录名和密码并将其添加到隐藏密码文件中
- 前往 http://www.htaccesstools.com/htpasswd-generator/
- 输入你的用户名和密码
- 产生一个隐藏文件.htpasswd加密你的密码
- htaccesstools.com 会产生包含用户名的一组数字
jimdandy:$apr1$vqg/kV..$Yn3w9aipE2ObdjSpaWnDf0
5. 打开第一步产生的.wp-admin文件,把上述一组数据拷贝进去
第三步 修改网站根目录下的隐藏文件 .htaccess
至此,您已经生成了一个登录名和密码,用于保护您的 WordPress 登录文件,但最后一步是确保 Web 服务器 Apache 知道每次有人尝试登录时都需要此登录名登录您的 WordPress 网站。
1.利用File Manager或FTP进入你的根目录, 找到.htaccess文件并打开,把下面CODE放入.htaccess文件的最下面:
ErrorDocument 401 "Unauthorized Access"
ErrorDocument 403 "Forbidden"
<FilesMatch "wp-login.php">
AuthName "Authorized Only"
AuthType Basic
AuthUserFile /home/username/.wp-admin require valid-user
把username改成你的username,最后一行一般是绝对路径。
2.保存文件
3.打开你的网站的登录页面,您现在应该会看到一个由服务器生成的弹出窗口,询问您的用户名和密码。输入刚刚创建并提交的用户名和密码后,您将被带到 WordPress 登录屏幕并可以正常进行。
锁定帐户是否有效?
在一定次数的错误密码尝试后锁定帐户是处理暴力尝试的常见做法。不幸的是,仅此一点并不总是足够的。
黑客可以通过在数千台服务器上尝试一个密码来发起大规模攻击。与在单个服务器上尝试多个密码不同,这种方法不会触发帐户锁定,并且巧妙地绕过了这种防御机制。
例如,如果服务器经常受到攻击,数百个用户帐户可能会不断被锁定。您的服务器很容易成为拒绝服务的牺牲品。
其他杜绝暴力攻击的方法
1.错误登陆后锁定账号
如上所述,在几次不成功的登录尝试后实施帐户锁定是无效的,因为它使您的服务器很容易成为拒绝服务攻击的牺牲品。但是,如果以渐进式延迟执行,此方法会变得更加有效。
具有渐进式延迟的帐户锁定仅在指定次数的不成功登录尝试后将帐户锁定一段时间。这意味着自动暴力攻击工具将不再有用。此外,管理员不必每 10 分钟左右解锁数百个帐户。
2.使 Root 用户无法通过 SSH 访问
SSH 蛮力尝试通常在服务器的 root 用户上执行。确保通过编辑 sshd_config 文件使 root 用户无法通过 SSH 访问。设置“DenyUsers root”和“PermitRootLogin no”选项。
3. 修改默认端口
大多数自动 SSH 攻击都是在默认端口 22 上尝试的。因此,在不同的端口上运行 sshd 可能被证明是处理暴力攻击的有用方法。
要切换到非标准端口,请编辑 sshd_config 文件中的端口行。
4. 使用验证码
我们都习惯于在互联网上看到 CAPTCHA。没有人喜欢试图理解那些看起来像是由两岁孩子涂鸦的东西,但是 CAPTCHA 等工具会使自动化机器人失效。
即使黑客已经开始使用光学字符识别工具来绕过这种安全机制,在生成的图像上输入一个单词或数字对杜绝机器人程序非常有效。
5. 限制指定的 IP 地址或范围能够登录
如果您只允许从指定的 IP 地址或IP 地址范围进行访问,暴力攻击者将需要努力克服该障碍并强行获得访问权限。
这就像在您最宝贵的数据周围设置了一个安全边界,所有不是来自正确 IP 地址的人都不允许访问。
您可以通过将远程访问端口限定为静态 IP 地址来进行设置。如果您没有静态 IP 地址,则可以改为配置 VPN。
6. 采用 2 因素身份验证 (2FA)
许多人认为双因素身份验证是抵御暴力攻击的第一道防线。实施这样的解决方案大大降低了潜在数据泄露的风险。
2FA 的伟大之处在于仅凭密码是不够的。即使攻击者破解了密码,他们也必须有权访问您的智能手机或电子邮件客户端。非常顽固的攻击者可能会试图克服这个障碍,但大多数人会转身寻找更容易的目标。
7. 使用独特的登录 URL
为不同的用户组创建唯一的登录 URL。这不会阻止蛮力攻击,但引入该附加变量会使攻击者的事情更具挑战性和耗时。
8. 监控你的服务器日志
请务必认真分析您的日志文件。管理员知道日志文件对于维护系统至关重要。日志管理应用程序,例如 Logwatch,可以帮助您执行日常检查,并可以自动生成每日报告。
不通过WordPress保护登陆页面确实是好主意