网络安全一直是个热门话题,WordPress开发者对安全问同样煞费苦心,但几乎所有的系统都存在潜在的安全隐患问题。

安全和方便,通常两者不能兼得,本文会向大家介绍一些保护WordPress安全的常用方法。

从根本上来说,安全并不是指系统坚不可摧,这是一种不现实的想法。安全更多是相对系统值得信任的程度和响应能力而言。例如,我们可以在值得信任的主机上运行稳定补丁版本的web服务器,无论Apache,IIS,Nginx,或是其他任何服务器。值得信任的主机会告诉用户:我们负责测试服务器的配置,然后您决定是否使用这种服务器。而不值得信任的主机不仅不能运行补丁版本的服务器,它们也不会告诉用户运行中的服务器版本信息。

有些功能已经贯彻了这一安全宗旨:

1. 访问限制:系统发现有人恶意入侵后,尽可能地限制其访问权限

2. 降低损失:如果可疑人士发现了系统中的漏洞,系统能够将损失减少到最低限度

3. 掌握WordPress信息:保留备份资料,定期了解WordPress网站的情况,记录自己对网站的修改,这些都可以帮助更好地了解WordPress。

 

计算机漏洞

确保自己用以运行WordPress的计算机中没有间谍软件、恶意软件与恶意广告软件,也没有被计算机病毒感染;

确保计算机所运行的程序版本是安全而稳定的。

 

WordPress数据包漏洞

由于编写WordPress程序时允许用户传递HTTP参数、坏URI字符串、表单输入等,这就导致了WordPress系统中的漏洞。

有两种方法可以解决这一问题:

1. 升级到WordPress最新版:WordPress开发人员不对旧版本的WordPress进行安全补丁维护。新版本发布或报告的漏洞被修正,等于是将旧版本的漏洞公开,这样旧版本会更容易受到攻击。

2. 报告bugs:如果你认为你发现了一个bug,请向系统报告——参见提交BUGs。一个bug可能就会造成一个漏洞。如果你认为你发现的是严重的安全漏洞,请先将详细信息发送到security@wordpress.org。

 

服务器漏洞

运行WordPress的web服务器、存储WordPress数据的数据库以及所有用于插件和其他帮助程序的脚本/编程语言都可能会有漏洞。

因此我们一定要确保web服务器、数据库、脚本解释程序的安全性和稳定性,同时也要确保主机能够保护我们的服务器、数据库以及脚本解释程序等。

此外,共享主机(不止一个人使用的主机)用户也要注意,如果共享主机上有一个人有安全隐患,其他人也不能幸免于难。请向主机提供商咨询相应的预防措施。

 

网络漏洞

WordPress服务器和客户端的网络都必须是安全的。这意味着客户端需要在主路由器上升级防火墙规则并注意所用的网络服务。由于网吧使用的是未加密的无线连接,用户在其中发送明文形式的密码是不安全的。用户和主机服务商都要确保黑客没有在网络中植入病毒。病毒可以利用网络漏洞,通过嗅探器解析用户的密码并进行其他破坏活动。

 

密码安全

良好的安全习惯可以防止很多安全问题发生,保护密码安全就是其中一个好习惯:不要用自己的名字、(任何语言中的)某个单词或者字符串4作为密码。密码不能过于单一,因此综合数字和变化的大写字母会使密码强度更高,避免被轻易破解。在无法更改用户名的情况下,密码强度尤为重要。恶意用户能够通过固定的用户名了解更多详细信息,从而方便他们编辑文件和数据库。

 

文件访问权限

WordPress中一些功能允许web服务器写入某些文件。但赋予程序对文件的写入权限是件危险的事,特别是在公共环境中。

从安全角度来说,最好尽可能地封闭文件的访问权限,在需要写入文件时再解除访问限制,或者为上传图片等任务新建一个专用的、权限较为宽松的文件夹。

 

下面介绍一个可行的方案。

所有文件都应该由用户本人拥有,只有用户本人有权编辑文件。如果有文件需要WordPress的访问权限,该文件应部分归属于web服务器的注册用户。

  • / ——WordPress根目录:所有文件都只能由用户本人进行编辑。

    • 如果用户希望WordPress自动生成改写规则,.htaccess可以被其他人编辑
  • /wp-admin/ ——WordPress管理范围:所有文件由用户本人进行编辑
  • /wp-includes/ ——WordPress逻辑层主体:所有文件由用户本人进行编辑
  • /wp-images/ ——WordPress所用的图片文件:所有文件由用户本人进行编辑
  • /wp-content/ ——用户提供的不同内容:此处开发人员打算将所有文件能够被所有人编辑(包括所有者,用户,组,公众等)

    • /wp-content/themes/ ——主题文件。使用内置主题编辑器时,所有的文件可以由组进行编辑;如果不使用内置主题编辑器,所有文件由用户本人进行编辑。
    • /wp-content/plugins/ ——插件文件:所有文件由用户本人进行编辑。
    • /wp-content/下其它目录由相应插件/主题记录,访问权限可能有所不同。
  • 如果服务器设置了访问权限,用户可以用下列命令递归地改变文件访问权限:

用于目录:

find [your path here] -type d -exec chmod 755 {} \;

用于文件:

find [your path here] -type f -exec chmod 644 {} \;

该命令不能在/wp-includes/中使用。

 

关于自动升级

2.7版本开始,WordPress开始具备自动升级功能。

例如,是文件的所有者而不是web服务器的所有者进行文件操作。

所有文件都被设置为0644,所有目录都被设置成0755,所有人都具有阅读权限,但只有用户本人有编辑权限

 

数据库安全

在同一个服务器上运行多个博客时,最好将这些博客数据分别存储在不同的数据库中,并且每个数据库由不同用户名进行管理。

最好在WordPress安装初始完成以上操作。这是一种降低损失的策略:即使入侵者成功进入某一个WordPress博客,他们也难以更改其它博客。

如果用户自己管理MySQL,请确保自己了解MySQL的配置并禁用不必要的功能(如接受远程TCP连接等)。

 

保护wp-admin文件

AskApache Password Protection plugin.插件在/wp-admin/文件夹里添加一些访问控件,这可以帮助增强博客的安全性。这款插件同样也可以保护/wp-login.php文件,以及/wp-includes/ 和 /wp-content/文件夹中的所有文件。

警告:安装AskApache Password Protection插件可能会导致WordPress管理面板被锁定,然后当用户访问自己博客的wp-admin目录路径时,系统会返回500错误。用户可以先在测试环境中安装AskApache Password Protection插件进行测试,避免服务器或其它配置发生错误。要卸载该插件,请先在wp-admin文件夹中删除新的.htaccess文件,然后登录博客并禁用(尽可能删除)该插件。在插件开发者的个人主页中有网友对这款插件的评价

在服务器端添加对/wp-admin/的密码保护措施,这样可以双重保护博客管理栏、登录以及文件。这样黑客和网络爬虫就必须要攻破第二重保护层才能获取管理文件。大多数情况下WordPress攻击都是由恶意软件爬虫自动发起的。

最常见的WordPress博客攻击大致可以分为两类:

1. 针对特定漏洞,向具有特定有效开发负载的服务器发送经过特别处理的HTTP请求。包括原有的/过时的插件和软件。

2. 试图通过“强制式”猜测密码登录博客。

为重要文件添加第二重保护层,这样黑客在试图破坏/wp-admin/前就必须要攻破第二重保护层。这种保护使用的是HTTP基本认证,密码会以未加密的普通文本方式在网络上传送。这种保护可以拒绝对服务器文件的访问,同时还能在攻击到达博客的/wp-admin/前对用户发出警告。

为/wp-admin/目录添加HTTP SSL加密链接后,所有通讯和敏感信息都被加密,这样才能最终实现“第二重保护层”。

 

保护wp-config.php

可以将wp-config.php文件移到WordPress安装文件的上级目录,也就是说,如果网站文件在用户网际空间的根目录中,wp-config.php文件可以被存储在网站根目录之外。

注意:wp-config.php只能存储在WordPress安装文件(wp-includes所在的文件)的上一级目录中。

 

SSL加密安全

可以用Admin-SSL插件将所有通讯信息和重要的WordPress cookies进行加密。SSL加密安全技术包括个人SSL和共享 SSL

 

安全插件

可以在WP Security Scan中下载Security Scan插件。Security Scan插件能够有力保护WordPress的安装安全,但用户仍然应该保管好自己的密码,并在安装主题和插件前进行仔细检查,备份相关文件和数据库以防黑客攻击。

防火墙插件

有些插件自称能够根据数据库与白名单筛选出可疑请求。BlogSecurity's WPIDS 插件中安装了PHPIDS,PHPIDS是一个PHP程序的通用安全层,WordPress防火墙通过结合WordPress预配置的规则与白名单判断出攻击行为。

 

需要写入权限的插件

如果插件需要具备WordPress文件和目录的写入权限,请先检查代码是否合法。你可以在Support Forums 和WordPress在线聊天系统(IRC)中进行检查。

 

代码执行插件

我们曾经说过,提高WordPress安全性的一部分目标是,在遭到攻击时尽量减少损失。有些插件允许PHP或其他代码对数据库中的输入数据进行操作,这样就增加了攻击可能造成的损失。

如果不使用这种插件,你还可以使用可调用函数的自定义页面模板。如果禁止WordPress中的文件编辑,自定义页面模板的安全措施会被激活。

 

隐藏式安全

人们认为通过隐藏信息来保证安全并不是一种可取的安全策略。但在WordPress的某些区域中,隐藏信息的确能够保证一定安全性:

1. 不要公布你所使用的WordPress版本:如果你使用的是WordPress老版本,大家都知道这些版本的漏洞,那么最好将版本信息隐藏起来,不要公布。即使你能够快速升级数据包,版本发布和升级之间的时间间隙也足以让攻击者见缝插针。但将主题中所有WordPress版本信息字符串(例如,每个页面中的<meta name="generator" content="WordPress 2.7" />)都隐藏起来的确是件令人头痛的事。因此最好的解决方法仍然是使用最新版本的WordPress。你可以用Replace WP-Version插件来将旧版本换成新版本。如果不希望用插件来删除版本信息,可以选择在主题的function.php文件中加上<?php remove_action 'wp_head', 'wp_generator'); ?>。

2. 重命名管理者账号:可以用update tableprefix_users set user_login='newuser' where user_login='admin'; 命令在MySQL命令行客户端中重命名管理者账号,也可以使用PhpMyAdmin等MySQL前端程序。

3. 更改 table_prefix(表名前缀): 很多已知的专门针对WordPress的SQL植入式攻击都假定默认情况下表名前缀是"wp_,"。更改表名前缀与隐藏式安全性质类似,但也能防止一些SQL植入式攻击。 WP Prefix Table Changer插件和WordPress Table Rename插件都可以自动更改表名前缀, Manual instructions这篇文章也可能起到一定帮助作用。

 

数据备份

定期备份数据,包括MySQL数据库(参见备份数据库)。保持备份的数据完整性。对备份资料进行加密处理,独立记录每个备份文件的MD5散列表,将备份存放在只读设备(如CD-R)中以增强资料保密程度。

在安全环境中定期保存整个WordPress(包括WordPress重要文件和用户数据库)的快照,这是一种可行的安全策略。这样的话,如果某个网站在五月一日遭到连带攻击,但是直到五月十二日攻击才被发现,那么网站主人在攻击之前的备份可以帮助重建网站,如果有幸获得攻击之后的备份,就能更好地了解这次攻击的具体情况。

 

日志记录

我们可以记录所有发送到WordPress的$POST变量。标准的Apache日志记录的安全性还有待加强。

 

 

参考推荐

WordPress 判断用户角色和权限以及管理员

WordPress 安全隐藏 wp-login.php 后台登陆入口

WordPress 修改后台登录地址提高安全性

WordPress 忘记密码找回的方法

WordPress 12个经典安全技巧

Centos7 配置 sendmail、postfix 端口号25、465