浅谈自用WordPress的安全定制

wp

个人在使用WordPress时往往没有企业那么规范系统的安全措施, 往往是wget下来解压以后一扔就开始运行了. 个人能够利用的资源有限, 虚拟主机甚至VPS上放个驱动级的东西在那轮询文件和数据库在今天看来即使可为, 也是不现实的. 对于个人来说, 被拿个shell其实没什么大不了的, 只能从另一个方面证明你的价值, 但如果你没有bt到每种在线服务都使用不同的密码, 那么密码的丢失就显得不那么好玩了; 对于生产环境, 两者都很不好玩. 表面上, WP是很安全的, 但在某些方面, 还是不那么让人放心. 这里主要从WordPress的设计上, 简单总结一下加固自用WordPress的几点基本想法. 不妨认为和WP有关的安全隐患主要在三方面:

  • webshell问题
  • 文章数据的安全
  • 个人信息的安全

三方面的确有一定的相关, 但又各有特点. 这里不做细分, 仅仅从几个具体的防御角度展开.

不被拿webshell, 基本上仰仗于WordPress自身的安全性, 但作为个人用户, 从源代码上彻底审计和加固整个WP是几乎不可能的事情, 估计只能做到勤升级了. 这年头0day也是需要产生经济利益的, 所以如果你没有很高的商业价值, 那么应该不会怎么为未公开的漏洞所扰. 由于翻译问题, WP中文版的发布总是有一定延时, 所以最好使用英文版. 其次, 将后台有利于写入webshell的功能彻底移除, 例如在线上传/在线安装插件的功能, 在线修改主题文件的功能, 都为直接写入webshell提供了可能. 第三, 尽量少装插件——虽然对于WP来说插件意味着几乎一切. 最小的服务等于最大的安全, 这话很实在. 即使用插件, 也尽量不要用冷门的, 更新频率、rating很低的插件. 对于已经安装的插件和主题, 尽量审计所有代码.

写到这里, 不得不吐槽WordPress一个十分坑爹的地方, 那就是wp-admin这个目录的名字很难修改. 程序里硬编码的地方实在太多 ... 即使你以暴制暴, 强制涂改掉所有wp-admin字样, 一升级还得重新改, 官方还不提供增量升级得自己diff, 真是ooxx. 所以要做定制, 这个地方是无法绕开的, 这个设计的改进也大有可为.

如果你绕开了这个问题, 更深入的想法还是有的. 比如桂林老兵以前实践过的的一个思路, 那就是设计一个C-S的登录方式, 如果我没记错的话, server端的登录接口似乎是隐藏在flash里, 没有client, 第三方根本不知道怎么进后台 ... 虽然这个思路比较极端, 不过还不算惊世骇俗, 完全可以实现. 不过这年头, Zend都被攻破, 隐藏这件事大概也没什么十分靠谱的选择.

如果出现注入一类的漏洞, 也许可以得到用户的的密码散列, 这对个人是一个不容小觑的威胁. 什么, 你还不知道CMD5? 以下一段为zz:

WordPress用户密码产生的过程是, 当需要生成用户密码的时候, 随机产生一个salt, 然后将salt和password相加, 再进行count次md5, 最后和encode64的hash数值累加, 就得到了一个以$P$开头的密码, 这个密码每次产生的结果都不一样.

虽说是这样, CMD5仍然提供了WordPress/phpbb3这种加密类型的数据, 简单试了一下, 成功率还是不低的. 根源就在于这个算法是公开的, 谁都可以就此生成一个彩虹表. 我们不妨另辟蹊径, 定制一个独有的MD5算法. MD5算法中间有一些默认参数, 也就是所谓的Chaining Variable部分, 简单的修改这些参数就可以得到和原始算法不同的加密结果了. 这时即使数据库中的MD5散列被获取, 用字典也是无法查到这个散列的, 从而也就保证了个人信息的安全. 当然, 在数学上, 这种修改可能导致更容易出现不同的密码在MD5后结果相同的情况, 不过作为自用, 还是完全可以接受的. 不多说了.

以上述idea为核心继续拓展, 不难做成一个WP安全定制版.

引一段《Inception》作结:

What's the most resilient parasite? Bacteria? A virus? An intestinal worm?
—— An idea. Resilient, highly contagious.
A single idea from the human mind can build cities.
An idea can transform the world and rewrite all the rules.

K2更新记

WordPress的K2主题在经历了无数的Nightly Build(参见最下面的截图)后结束了RC状态,并且终于采用了语言包机制。以前这中英混杂的状态实在是不好受,手动汉化还出现过乱码的问题。观察了官方版本一段时间,似乎比较稳定了,今天没什么事儿就把它给更新了。小记如下:

  • 在后台点点鼠标升级,目前K2最新版本为1.0.3(如果不行,手动上传).
  • 这里(K2-i18n小组)下载简体中文语言包,即zh_CN.mozh_CN.po
  • 把 zh_CN.mo 和 zh_CN.po 上传至 /wp-content/themes/K2/languages/ 目录
  • 检查主题设置是否完好,是否出现RPWT,至此简单的升级完毕.

继续阅读

记录一下最近的修改

我有做一点笔记的习惯,这里摘录其中一部分,记录了对WP的一些修改。

1. 在右侧的sidebar增加了RSS订阅的图标(我比较lazy,这还是在太云的催促下),使用了FeedSky提供的Feed输出功能(其实FeedBurner也挺好的,只是 ...);

2. 简单更新了一下About和CV页面,完成度,1.0% ...

3. 增加了wap.road2stat.com的二级域名,以后通过移动设备访问这个二级域名,就可以看到适合WAP标准的输出,虽然估计没什么人会用手机上 ...

4. 替换了WordPress的默认表情,为了方便大家,这套表情可以在这里下载;

5. 使用WordPress中文工具箱提供的 random_posts() 函数简单的自定义了一下K2的404页,在找不到请求的页面时返回这个404页并随机选出五篇文章给读者,优化用户体验;

6. 开始想手动汉化K2这个主题,不幸地遇到了乱码问题,看到有台湾同胞做出了正體中文版,似乎已经有兄弟根据这个做了简体的mod,抓紧时间换上。

ok,大概就这些,看上去有点像产品的What’s New .. faint ..

两位同学的博客上线&Planet式阅读理念

几乎没费什么周折,两位一同参加这次R会议好友的blog在开始搭建一周之后上线了。虽然目前内容和部分页面仍在建设中,但是相信作为blogger中的freshman(其实我也算是),他们的写作会是很吸引人的(暗中透露一下,俺已经向这位有为青年预约了概率论基础方面的技术文章,期待ing)。很高兴能够帮助他们搭建这样技术blog,感谢他们的信任,尤其是对我这样一个其实几乎完全不懂HTML、PHP还有CSS的不靠谱青年。其实我所做的,也只是帮他们申个域名、租个空间,顺带讲两下Cpanel和FTP的用法,安装一个几乎完全Mouse-Clicking的WordPress这些。很高兴看到我们的博客圈欣欣向荣。学习为核心,内容是王道,敬请诸位期待他们的精彩博文吧。 :smile:

Cheney Lee:

随喜居 | 统计,生活,艺术

http://www.cheneylee.com

Gao Tao:

Just Do It! | 统计边,生活处

http://www.gaotao.name

(我的评价:深厚的分析底蕴,扎实的代数功底,醇正的国学修养。做理论,拼思想的有为青年。)

继续阅读