WordPress:Hardening WordPress

来自站长百科
跳转至: 导航、​ 搜索

安全问题是个有趣的问题,有许多不同的级别。WordPress开发者认真地对待这个问题,但是与其它的系统相似,可能会产生一些潜在的安全问题,而且安全和便利使用之间通常有一个权衡。我们会讨论一些常见的关于安全安装WordPress的注意事项。

什么是安全?基本上来说,安全不是关于极好的,不会毁坏的系统,非常难以发现和/或者维护。安全与信任和响应性的相关性更大。例如,一个可以信赖的主机运行了网络服务器的一个稳定的,patched分支(如Apache,IIS,或者其它的)。主机会通知你有这些分支,同时测试配置,让你自己决定选择哪个。一个不可以信赖的主机,在发行的时候,不会应用patches,也不会通知你主机在运行哪个服务器版本。

几个主题处理这个指南:

  1. 限制访问:做出明智的选择,有效地遏制一些怀有恶意的人访问一些内容。
  2. 牵制政策:如果一个怀有恶意的人,发现了你的安装中的一个缺陷,你的系统必须要经过设置来使得他在你的系统中可能做的破坏,降低到最小的值。
  3. 知识:保存文件备份,每个一段时间,就要查看WordPress安装的状态,给更改的内容附上文件证明会帮助你了解你的WordPress安装。

你的电脑的弱点[ ]

要确定你用来发表WordPress的电脑,没有spyware,malware,adware,也不会收到病毒的攻击;在安全,稳定地运行你的应用软件。例如,如果你的个人电脑上有一个keylogger,下面的任何内容都不会有什么意义。

WordPress软件包自身的弱点[ ]

由于程序编写的方式,WordPress自身拥有缺陷,会使攻击者传送HTTP arguments,破坏的URI命令行,形式输入,等等,这些都会导致不好情况的发生。

有两种方法,可以处理这个问题:

  1. 保持最新的 WP 版本: WordPress开发者对于旧的版本的WordPress,不保持安全patches。一旦一个新的WP版本发行了,或者WP中的缺陷得到了解决,那么在公众域中肯定能够找到解决缺陷的信息,这使得旧的版本更容易地被袭击,设置被一个简单的脚本kiddie袭击。
  2. 报告程序缺陷:如果你找到了一个你认为的程序缺陷,报告一下—请看看提交_程序缺陷。你可能发现了一个缺陷,或者发现了一个程序缺陷可能会导致WordPress缺陷。如果你发现了一个严重的安全隐患,发送电子邮件到security@wordpress.org。

服务器缺陷[ ]

运行WordPress的服务器,装有WordPress数据,PHP,和其它的用于插件或者有帮助的应用软件中的脚本/变成会有缺陷。因此,要确定你运行一个安全,稳定的网络服务器,数据库,脚本注释器版本,或者确定你正在使用一个可以信赖的主机,这个主机为你处理这些事情。

同时注意,如果你位于一个共享的服务器上(除了你之外,这个服务器还会托管其他的人)。如果其他人妥协了,即使及遵循了这个指南中的每个步骤,你也可能会妥协。要确定问问你的[1]他们采取了什么安全防御措施。

网络缺陷[ ]

网络有两个末端 -- WordPress 服务器端和客户网络端—应该得到信任。这意味着更新防火墙 rules on your home router同时要注意你是来自于哪个网络。你在一个繁忙的网吧中,在cleartext中以无线连接的连接方式,发送未加密的密码,不是 可以信任的网络。(以下的文章描述了,当你在一个公共场所使用无线连接,可以被扩充为通过ssh tunnels 访问你的博客的安全方式,怎样保护你的电子邮件)。你的主机应该确定黑客不能接近它们的网络,同时你也要确定。网络的缺陷使得密码能够被sniffers和其它形式的havoc截取(例如man-in-the-middle袭击)。

密码[ ]

安全使用的好习惯能够避免一些网络缺陷。其中一项重要的安全措施就是密码:不要使用你自己的姓名来作为密码,不要使用字典中的一个单词作为密码(任何语言的单词),不要使用一个四个字符串的数字来作为你的密码。你使用密码的目的是使得搜索范围尽可能大,因此使用数字和大小写的混合体,会使得在数据上破解一个密码变得更加困难。如果你没有重新命名管理员帐户,设置好密码,尤为重要。没有重新命名管理员帐户的话,还有恶意的用户已经知道了谜底的一半,他们知道哪个用户名,能够使得他们拥有特权,来编辑文件和数据库。 密码自动产生器 对于产生复杂而合理的密码,非常有用。

文件权限[ ]

WordPress的一些非常酷的功能,在于能够使网络服务器编写一些文件。然而,允许应用软件拥有编写文件的权限,是一件非常危险的事情,特别在一个公共使用的环境下。

出于安全方面的考虑,最好尽可能地禁止文件使用权限,当你需要让出编写权限的时候,再放松一些限制,或者当你要创建一个特别的文件夹,需要放松权限,就如上传图像的时候,你可以放松文件的使用权限。

下面是一个可能存在的权限方案。

你的用户应该拥有并且可以编写所有的文件。任何文件需要WordPress的编写权限,应该由网络服务器使用的用户帐户共同拥有。

  • / --WordPress根目录:只有你的用户帐户可以编写所有的文件。
    • 例外 .htaccess如果你想要WordPress自动地为你产生编写规则。
  • /wp-admin/ --WordPress管理区:只有你的用户帐户可以编写所有的文件。
  • /wp-includes/ --WordPress application logic的大部分:只有你的用户帐户可以编写所有的文件。
  • /wp-images/ --WordPress使用的图像文件:只有你的用户帐户可以编写所有的文件。
  • /wp-content/ --不同的用户支持的内容:开发者有意让所有的(主人/用户,小组和公众)来编写内容。
    • /wp-content/themes/ --主题文件。如果你想要使用内置的主题编辑器,所有的文件都要被组合起来,而且是可写的。如果你不想使用内置的主题编辑器,只有你的用户帐户可以编写所有的文件。
    • /wp-content/plugins/ --插件文件:只有你的用户帐户可以编写所有的文件。
    • /wp-content/下面其它的目录,应该由任何需要这些目录的插件/主题,使这些目录备有文件证明。权限可能有所不同。
  • 如果对于服务器,你有shell权限,你可以使用下面的命令行,递归地更该文件权限:

关于目录
find [your path here] -type d -exec chmod 755 {} \;
For Files
find [your path here] -type f -exec chmod 644 {} \;

你需要避免为/wp-includes/使用这个命令行。

数据库安全[ ]

如果你在同一个服务器上运行多个博客,考虑使得不同的用户在不同的数据库上管理这些博客,这种做法是明智的。当执行初始的WordPress 安装的时候,最好能够完成上述的执行任务。这是一个牵制的策略:如果一名入侵者,成功地破解了WordPress的安装,更改你的其它博客,就会更难。

如果你自己管理MySQL,要保证你了解MySQL的配置和MySQL不需要的功能(例如接受远程TCP链接)已经取消了。请看看Secure MySQL 数据库设计上面详细的介绍。

保护 wp-admin[ ]

使用AskApache 密码保护插件给你的/wp-admin/文件夹添加权限控制,你可以大大地提高博客的安全性。插件也保护你的/wp-login.php文件,和你的/wp-includes//wp-content/ 文件夹中的所有的文件。

/wp-admin/添加server-side密码保护,会在博客的管理界面,登录,和文件中添加第二层保护。这使得袭击者或者bot袭击这个第二层的保护而不是真正的管理文件。大多数时间里,针对WordPress是由一个恶意的软件bot带来的。

针对WordPress博客的最常见的袭击,可以分为两类:

  1. 向你的服务器发送特别制作的HTTP,拥有特别的exploit 有效载荷,处理特别的缺陷。这些包含旧的/过时的插件和软件。
  2. 通过"强行破解"密码,试图使用你的博客。

在那些重要的文件上添加第二层的密码,你可以迫使袭击者先击破第一层密码,才能够试图击破主要的/wp-admin/。这个保护使用基本的 HTTP 证明,密码在网络上传播,像纯文本那样没有编码,没有加密。这种保护的主要好处在于,否认访问你的服务器文件而且在一个袭击到达你的/wp-admin/ 之前,使你警惕这个袭击。

这个"第二层"密码保护的最终执行,需要为你的/wp-admin/目录准备一个HTTPS SSL 加密连接,这样所有的交流内容和敏感的数据都得到了加密。

SSL 加密安全[ ]

使用Admin-SSL 插件,你可以给你的交流内容和重要的WordPress cookies 保护和加密。与保密的和分享的SSL协作。

插件[ ]

安全插件[ ]

可以在WP 安全 扫描上添加WP安全扫描插件。虽然这个插件能够极大地保护你的WordPress安装,你需维护好的密码,在安装主题和插件之前,对其进行检查,同时要保存好文件和数据库备份,以防止你被黑客袭击后的情况发生。

需要写权限的插件[ ]

如果一个插件需要编写WordPress文件和目录的权限,请阅读代码来确定插件是合法的,或者和某个你信任的人一起检查插件。可能存在的检查地点是支持论坛IRC Channel

Code execution plugins[ ]

如我们所叙述的,加强WordPress的一个目的是,使得WordPress在遭受袭击的时候,能够承受损害。允许任意的PHP或者其它的代码在数据库中的文章中执行的插件,有效地放大了一次成功袭击可能产生的损害。

避免使用这种插件的一个方法是使用自定义网页模板,这种模板命名函数。只有当你在WordPress内部编辑文件的时候,部分这样的安全措施才能起作用。

通过隐匿获得安全[ ]

通过隐匿得到安全,一般被看做是一种不佳的初级策略。然而,在WordPress中,有些区域,隐匿一点,能够起到作用。

  1. 不要为你正在运行的WordPress版本登广告:: 如果你正在运行一个旧的版本的WordPress,上面拥有众所周知的缺陷,那么你将这个信息公之于众,是不明智的。为什么不将WordPress的整个版本隐匿起来呢?即使能够尽可能快地更新软件包,新版本的发行与你的更新之间会有一些拖延的时间,潜在方面,这些时间,能够足够让一个怀有恶意的人来执行一次袭击。 然而,编辑去除WordPress给它的版本做广告的地方,是非常麻烦的。最好的方法还是,要确定你正在运行最新的版本。一种更加简单的方法可以实现这一点 替换WP-版本插件。
  2. 重新命名管理帐户:用一个命令行,如update tableprefix_users set user_login='newuser' where user_login='admin';,或者使用一个MySQL frontend like WordPress:phpMyAdmin,可以在MySQL 命令行client中重新命名管理帐户。

数据文件备份[ ]

定期地备份你的数据,包括你的MySQL数据库(请看看备份你的数据库)。数据完整性对于可信任的文件备份至关重要。给文件备份加密,给每个备份的文件保存一个独立的MD5 hashes记录。而且/或者在只读媒体(如CD-R)上放置文件备份,来增强你的信心,相信你的数据不会被干扰。

一个安全的文件备份策略包括,在一个可以信任的位置上,保存整个WordPress安装(包括WordPress核心文件和你的数据库)的一套按时的snapshots。设想一个站点制作每周的snapshots。这样的一种策略,意味着如果一个站点在5月1日,收到了安全方面的威胁,但是这种威胁在5月12日,才探测到了,站点的拥有者会有一个收到安全威胁之前的文件备份,这个备份能够帮助重新建立一个站点,也许还有拥有一个站点受到安全威胁之后的文件备份,这个备份能够帮助判断站点是怎样收到安全威胁的。

Logging[ ]

将所有的$POST变数log 发送到WordPress是可能的。标准的Apache logs对于处理安全讨论,没有提供多少帮助。