2016年9月,我们遇到了两次利用插件漏洞的恶意代码上传事件,</wbr>一次是被挂黑页、被网监查了水表,一次是滥发垃圾邮件用完了 LUG 的邮件配额。第二次恶意代码上传事件后,我们修改 PHP 解释器代码,禁止了 .php 扩展名文件的写入和非 .php 扩展名文件的执行。这个限制的后果是无法安装或升级插件、主题。非常抱歉此问题给您带来的麻烦。

现在修改了 PHP 解释器中的文件访问限制,使得通过 WordPress 后台正常的上传、更新、编辑插件和主题不会受到影响。禁止插件和主题自己修改代码,也就是利用插件漏洞的恶意代码上传将不能得逞(当然部分生成 PHP 模板的插件可能无法使用)。

具体文件访问限制策略如下:

  1. 非 .php 扩展名的文件禁止执行(与之前相同)
  2. WordPress 用户上传目录内的文件禁止执行(上传目录相对路径可在 php.ini 里配置,用户不能修改)
  3. .php 扩展名的文件,只有受信目录内的代码才能写入(受信目录列表可在 php.ini 里配置,用户不能修改)。具体方法是判断 php 调用栈上的每个文件是否都在受信目录内,只要有一个不在就报错。</wbr>目前受信目录是用户间共享、用户不可修改的 WordPress 核心代码。

此外,之前 blog 注册激活后需要升级数据库。这是因为之前安装 blog 的过程是直接导入一个数据库模板,WordPress 4.6.1 检测到数据库表结构的变化,就提示需要升级。现在修改了安装过程,直接调用 WordPress 的数据库安装函数,装好的 blog 就是最新版本的数据库结构。与 WordPress 原版安装程序略有不同,您将不会收到 WordPress 自动发送的安装成功邮件,因为其中包含明文密码,我们把这个发邮件的过程去掉了。

如果您注册新博客后发现问题,或发现插件、主题无法安装、升级,欢迎报 bug。感谢您对科大博客的支持。