问题描述
我有一个客户最近被黑客入侵,我注意到,她的网站上出现了奇怪的人物,像Æ和Æ。事实证明,黑客将数据库中的 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-。现在想象一下:
-
有人发表
+ADw-script+AD4-alert(+ACI-Hello+ACI-)+ADw-/script+AD4-作为评论文字。它将通过所有验证未转义。 -
数据库期望并将所有传入的数据视为 UTF-8 。由于所有的 UTF-7 流都是有效的 UTF-8,所以这不会导致 SQL 错误,而
mysql_real_escape或htmlspecialchars将不会触及它。 -
WordPress 发送头
text/html;charset=utf-7。 -
WordPress 显示注释,期望转义的数据。但是由于浏览器被视为 UTF-7,JavaScript 将被执行。
那么是的,这是一个安全问题。
所有浏览器都不支持 UTF-7,大多数文件会将文本呈现为 Windows-1252(或其操作系统的默认编码) 或 UTF-8 。您可以在我的 UTF test pages 上测试浏览器的支持。主要的问题是:逃脱不再工作了。
只是改变编码值不是解决办法。一般的访客永远不能改变,所以你必须找到敞开的门。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。