<
和>
编码为+ADw-
和+AD4-
在里面UTF-7. 现在想象一下:
某人发送+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。主要问题是:逃跑不再有效。
仅仅更改编码值并不能解决问题。一个常客永远无法改变它,所以你必须找到打开的门。