问题描述

我有一个客户最近被黑客入侵,我注意到,她的网站上出现了奇怪的人物,像Æ和Æ。事实证明,黑客将数据库中的 wp_options 表中的 blog_charset 更改为 UTF-7 。我把它设置回 UTF-8,但是我想知道如果在设置为 UTF-7 的时候,是否会产生任何安全漏洞?

我做了一些搜索,发现那里曾经是一个 WordPress UTF-7 vulnerability that was fixed in version 2.0.6 。我们正在运行最新版本的 WordPress,所以他们不能使用这个漏洞,但是还有与 UTF-7 相关的其他漏洞利用?真的,有什么理由黑客会改变 blog_charset 而不是痛苦吗?我一直试图确定他们是如何进入的,我想知道这是否连接到某种方式。

最佳解决方案

<>UTF-7 中编码为+ADw-+AD4-。现在想象一下:

  1. 有人发表+ADw-script+AD4-alert(+ACI-Hello+ACI-)+ADw-/script+AD4-作为评论文字。它将通过所有验证未转义。

  2. 数据库期望并将所有传入的数据视为 UTF-8 。由于所有的 UTF-7 流都是有效的 UTF-8,所以这不会导致 SQL 错误,而 mysql_real_escapehtmlspecialchars 将不会触及它。

  3. WordPress 发送头 text/html;charset=utf-7

  4. WordPress 显示注释,期望转义的数据。但是由于浏览器被视为 UTF-7,JavaScript 将被执行。

那么是的,这是一个安全问题。

所有浏览器都不支持 UTF-7,大多数文件会将文本呈现为 Windows-1252(或其操作系统的默认编码) 或 UTF-8 。您可以在我的 UTF test pages 上测试浏览器的支持。主要的问题是:逃脱不再工作了。


只是改变编码值不是解决办法。一般的访客永远不能改变,所以你必须找到敞开的门。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。