系统越流行,越容易受到攻击。WordPress 是世界上最流行的 CMS 系统。互联网上的 WordPress 站点每天都在遭受着各种各样的攻击。有很多客户的 WordPress 站点是在我们维护你的服务器上托管的,维护这些站点的安全是个不小的挑战。
针对 WordPress 的攻击类型
针对 WordPress 的攻击一般是通过工具扫描批量站点 WordPress 站点,然后进行相应攻击,世界上 WordPress 站点太多了,针对某个站点逐个攻击的效率太低了。
暴力破解 FTP,服务器账号和网站管理员账号
暴力破解帐号是多有攻击中最原始,最初级,也是最没有技术含量的攻击类型。只要能找到合适的工具,甚至电脑小白都能发起这种攻击。当然这种攻击防御起来也比较简单。
FTP 密码是通过明文传输的,这是一个很大的漏洞。对于 FTP,我们采取的措施是不开放 FTP,所有代码通过 Git 提交。
对于暴力破解服务器账号,我们所有的服务器都是 CentOS 系统,通过 banhost,登录几次失败后,就屏蔽掉这个 IP。
对于暴利破解网站管理员帐号,我们会建议客户采用复杂的密码,用户名不使用默认的 admin。只要遵循这两条措施,网站管理员帐号基本就破解不了了。除此之外,我们还可以使用 FAIl2ban 服务屏蔽暴力破解行为。 即使这样,WordPress 的管理员密码还是可能泄露出去,怎么能在泄露了密码后,最大程度的保证安全,我们会在下面说。
通过服务器或 WordPress 漏洞注入代码
这种攻击类型很常见,大部分是挂一些广告链接到 WordPress 站点上。而根据我们的经验,大部分针对 WordPress 的广告链接植入类型的攻击是来自俄罗斯(真是黑客众多的国度)的流量。
我们采取的措施是,给所有的 WordPress 内核文件,主题,插件加只读属性,就算 WordPress 有尚未发现或没有及时修复的漏洞,攻击者也修过不了程序文件。而 WordPress 的 uploads/wp-content 文件夹,则是可以修改内容的。这样既保证了程序的安全,又不会影响用户的正常使用。
拒绝服务(DDoS)攻击
这种攻击恶意满满,一般是针对某个站点的。有时候是站点的相关人员得罪了某个不该得罪的人,更多的时候是竞争对手恶意竞争雇人发起的。原理是制造很多虚假的网络访问,造成服务器网络拥堵,让正常的网站用户访问不了网站。虽然可以在服务器上进行一些设置,屏蔽掉一部分攻击,但效果不大。针对这种类型的攻击,一般需要求助服务器提供商进行解决了。
修改 wp-config.php,禁用后台代码编辑功能
上面提到,如果网站管理员密码泄露了,怎么保证安全?我们采取的措施是禁用 WordPress 后台的主题和插件安装、编辑功能,用户可以在后台看到所有已经安装的主题和插件,可以自行启用和禁用插件,切换使用的主题,却不能在后台安装或编辑主题或插件。需要安装插件的时候,可以通过 Git 上传的方式进行安装。
这样也能比较经验不足的用户在后台编辑主题或插件出现致命错误而导致的网站不可访问,把下面两行代码添加到 WordPress 的 wp-config.php 文件中即可。
// 不允许编辑和修改文件 define('DISALLOW_FILE_EDIT', true); define('DISALLOW_FILE_MODS',true);
大部分暴力破解攻击是为了在目标站点上添加广告链接,有些甚至做得很隐蔽,正常的用户根本看不出来。虽然这些攻击不会破坏网站的正常运行,还是建议禁用后台代码编辑修改功能,防患于未然。
定期检测用户生成的内容,清理不应该出现的文件。
比如uploads目录中,如果是普通用户正常使用,肯定不应该出现 PHP 文件,如果出现了,这些文件肯定是不怀好意的,先备份到一个Web目录之外的地方,再删之。
因为我们服务器上的站点都是启用了 URL 重定向的,所以正常的用户访问应该很少有直接访问 PHP 文件的。定期检测一下网站的访问日志,重点检查针对 PHP 文件的访问,从中很容易看出问题,找到被植入的代码问题。
定时异地备份,防止灾难性事故发生
我们在服务器上的备份策略是程序文件每周异地备份,数据库每天异地备份。就算是服务器上的文件全部丢失了,一般也就是损失一天的数据。
我们采取的异地备份方案是网站上很容易找到的 VPS 备份到 Dropbox 脚本。由于 WordPress 可以添加两步验证,备份代码的安全性是不用担心的。
及时更新 WordPress 插件到最新版本
及时更新 WordPress 到最新版本是保证安全的一个必要措施。如果是一两个站点,更新的时候,直接登录到后台,点更新就可以了,WordPress 的更新过程是相当流畅的。可是站点一多,问题的性质就变了,如果几十个站点,逐个登录后台点更新,可能一天的时间都浪费在这上面了。
由于我们限制了在 WordPress 后台编辑代码文件,WordPress 或插件更新的时候,后台只会收到更新提醒,而不能自动更新。
为了解决更新的问题,我们写了一个 Bash 脚本,运行这个脚本后,可以自动下载最新的 WordPress 程序,然后覆盖每个网站相应的文件进行更新。
总结,欢迎交流
最好了上面的措施,我们几个服务器上的网站就没有再出现过问题了,虽然通过网站访问日志,还是能看到针对这些网站的攻击,但是这些攻击都被牢牢的挡住了。当然上面的措施,只能挡住攻击工具对于网站的批量攻击。如果你的站点被有经验的黑客盯上了,被攻破的危险还是有的。你是怎么维护 WordPress 的安全的,或者你觉得本文中提到的安全维护方案有什么漏洞,欢迎在评论中提出交流。