URL中的奇怪字符

Posted

技术标签:

【中文标题】URL中的奇怪字符【英文标题】:Weird characters in URL 【发布时间】:2014-10-03 01:59:30 【问题描述】:

在我的网络服务器中,当用户请求带有奇怪字符的 URL 时,我会删除这些字符。系统会记录这些案例。当我检查经过消毒的箱子时,我发现了这些。我很好奇这些 URL 的目的是什么?

我检查了 IP,这些是真实的人,并且像普通人一样使用网站。但是在他们对这些人的 20 个 URL 请求中,有 1 次 URL 最终出现了这些奇怪的字符。

http://example.com/@%EF%BF%BD%EF%BF%BD%02?o=3&g=&s=&z=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3E?, agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0,
http://example.com/%60E%EF%BF%BD%02?o=3&g=&s=&z=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3E?, agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
http://example.com/%60E%EF%BF%BD%02?o=3&g=&s=&z=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3E?, agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
http://example.com/p%EF%BF%BD%1D%01?o=3&g=&s=&z=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3E?, agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
http://example.com/%EF%BF%BDC%EF%BF%BD%02?o=3&g=&s=&z=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3E?, agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
http://example.com/%EF%BF%BDR%EF%BF%BD%02?o=3&g=&s=&z=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD`%EF%BF%BD%EF%BF%BD%7F, agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/36.0.1985.125 Safari/537.36
http://example.com/%EF%BF%BDe%EF%BF%BDv8%01%EF%BF%BD?o=3&g=P%01%EF%BF%BD&s=&z=%EF%BF%BD%EF%BF%BD%15%01%EF%BF%BD%EF%BF%BD, agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36

http://en.wikipedia.org/wiki/Specials_(Unicode_block)

【问题讨论】:

您的网站中是否有页面不是用英文编写的?.. 这个网站的大部分页面都是土耳其语。这些用户很可能使用土耳其语。 我在俄罗斯网站上遇到了同样的问题 这已经出现在 Information Security stackexchange 上,而且他们离答案更近了。不过,您可能想看看讨论:security.stackexchange.com/questions/63742/… 【参考方案1】:

它们本质上是格式错误的 URL。它们可以由试图利用网站漏洞的特定恶意软件、浏览器插件或扩展程序故障或 JS 文件中的错误(即使用 Google Analytics 跟踪)结合特定浏览器版本/操作系统生成。无论如何,您实际上无法控制来自客户端的请求,并且您无法阻止它,因此,如果您生成的 HTML/JS 代码是正确的,那么您已经完成了您的工作。

如果您出于任何原因想要更正这些 URL,您可以启用 URL rewriting 并使用正则表达式过滤器设置规则以将这些 URL 转换为有效 URL。无论如何,我不建议这样做:Web 服务器应该以 error 404 page not found 消息进行响应,因为这是标准(毕竟这是客户端错误),这是在我认为比应用 URL 重写更快、更安全的方法。 (重写过程可能包含错误,因此有人可以尝试利用它等)

出于好奇,您可以使用您选择的在线 URL 解码器(即this)轻松解码这些 URL,但基本上您会发现您已经知道的:这些 URL 中有很多 UTF-8 replacement characters .

实际上,%EF%BF%BD 是 UTF-8 替换字符的 3 个字节 (EF BF BD) 的十六进制表示形式的 url 编码版本。您还可以将该字符视为EF BF BDFFFDï ¿ ½ 等等,具体取决于您选择的表示方法。

此外,您可以自行检查客户端如何处理该字符。去这里:

http://www.cogsci.ed.ac.uk/~richard/utf-8.cgi?input=%EF%BF%BD&mode=char

按下 GO 按钮,然后使用浏览器开发工具检查实际发生的情况:浏览器实际上是在将未知字符发送到 Web 服务器之前使用 %EF%BF%BD 对其进行编码。

【讨论】:

您是否遇到过 Google Analytics 可能导致替换字符的特定问题?我在这里有一个类似的帖子security.stackexchange.com/questions/63742/… 我确实使用 Google Analytics,但还没有重现它的问题【参考方案2】:

这些看起来像是被称为“Adpeak”的恶意软件/广告软件插入的损坏的 URL。

以下是有关 Adpeak 的一些详细信息:

How to remove AdPeak lqw.me script from my web pages?

Adpeak 有一个客户端组件,可以将以下标签粘贴到网页中:

<script type="text/javascript" id="2f2a695a6afce2c2d833c706cd677a8e" src="http://d.lqw.me/xuiow/?g=7FC3E74A-AFDA-0667-FB93-1C86261E6E1C&amp;s=4150&amp;z=1385998326"></script>

Adpeak 有时也会使用主机名“d.sitespeeds.com”、“d.jazzedcdn.com”、“d.deliversuper.com”、“d.blazeapi.com”、“d.quikcdn.com”、可能是其他人。这里还有几个例子:

<script type="text/javascript" id="2f2a695a6afce2c2d833c706cd677a8e" src="http://d.deliversuper.com/xuiow/?o=3&amp;g=823F0056-D574-7451-58CF-01151D4A9833&amp;s=7B0A8368-1A6F-48A5-B236-8BD61816B3F9&amp;z=1399243226"></script>
<script type="text/javascript" id="2f2a695a6afce2c2d833c706cd677a8e" src="http://d.jazzedcdn.com/xuiow/?o=3&amp;g=B43EA207-C6AC-E01B-7865-62634815F491&amp;s=B021CBBD-E38E-4F8C-8E93-6624B0597A23&amp;z=1407935653"></script>
<SCRIPT id=2f2a695a6afce2c2d833c706cd677a8e type=text/javascript src="http://d.lqw.me/xuiow/?o=3&amp;g=87B35A3E-C25D-041E-0A0F-C3E8E473A019&amp;s=BBA5481A-926B-4561-BD79-249F618495E6&amp;z=1393532281"></SCRIPT>
<SCRIPT id=2f2a695a6afce2c2d833c706cd677a8e type=text/javascript src="http://d.lqw.me/xuiow/?o=2&amp;g=0AD3E5F2-B632-382A-0473-4C994188DBBA&amp;s=9D0EB5E9-CCC9-4360-B7CA-3E645650CC53&amp;z=1387549919"></SCRIPT>

“id”是一致的:在我们看到的案例中,它始终是“2f2a695a6afce2c2d833c706cd677a8e”。

总有一个“g”、“s”和“z”参数,有时还有一个值为 2 或 3 的“o”参数。

我们注意到,在我们的页面中,该脚本的某个版本与在 DOM 中看到损坏的字符 100% 相关:如果“o”被省略或设置为 2,我们将看到一个 Unicode FFFD 在附近注入页面末尾或有时是 Ux000E 字符,也称为 SHIFT OUT,它会破坏标准 JSON/XML 序列化库,这就是我们一直在研究这些 URL 的原因。我们从未见过“o=3”的损坏

但是,有时 Adpeak 看起来很困惑,并像这样插入垃圾:

<script type="text/javascript" id="2f2a695a6afce2c2d833c706cd677a8e" src="��?o=3&amp;g=&amp;s=&amp;z=����������~?"></script>

现在,我们不知道这是 Adpeak,因为 URL 被破坏了,但“o=3”、“g”、“s”和“z”参数是四个确凿证据。此处缺少主机,因此它将针对我们的服务器进行解析,因此这些 UxFFFD 将作为 UTF-8 十六进制编码的“%EF%BF%BD”序列发送,这与人们在上面看到的相同。

如果您想知道这种情况有多普遍,对于具有高流量和广泛人口统计的特定客户,我们看到 Adpeak URL 注入了大约 1.09% 的网页,包括格式正确的 Adpeak URL 和 URL与 UxFFFD 的。如果您只查找带有 UxFFFD 序列的 Adpeak URL,它们会出现在所有网页的 0.053% 中。如果您只查找导致 DOM 损坏的 Adpeak URL(例如,包含“o=2”或不包含“o”参数的有效 URL),则覆盖了所有网页的 0.20%。

【讨论】:

【参考方案3】:

可能您网站的字符集未初始化为 UTF-8,但是当您在网站中请求页面时,它认为该字符是使用 utf-8 编码的。当它“理解”字符不是以 UTF-8 格式编码时,它会将它不知道的任何字符替换为字节序列 EF BF BD(“字符占位符”)。 通过在每个页面中使用&lt;meta charset="UTF-8"&gt;,确保您在网站的所有位置都使用 UTF-8。

在不同情况下的另一个例子:Whats going on with this byte array?

【讨论】:

我已经将此添加到我的页面头部部分&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;。但问题存在。是否可以解码这些奇怪的字符,以便我猜出原因。 可能用户强制其浏览器使用 UTF8 以外的编码。例如用户选择 iso-8859-1 作为默认编码?【参考方案4】:

你必须使用正则表达式函数,在php官方网站搜索它或谷歌它...... 使用其他语言而不是英语的 url 导致了这个问题, Meta charset utf 8 不会影响 url,所以它不会帮助..meta charset 只能帮助您在网页上显示其他语言文本,而不是您的 URL.. 使用 php Regex 你甚至可以在 url 中显示中文文本.. 希望它会工作..

【讨论】:

【参考方案5】:

只需取消选中 Visual Studio 中的 EnableBrowserLink 选项即可。每件事都可以开箱即用。

【讨论】:

以上是关于URL中的奇怪字符的主要内容,如果未能解决你的问题,请参考以下文章

ajax 发布后的 Phpmyadmin 奇怪的字符

替换routeurl中的字符?

从Python中的字符串中删除奇怪的隐藏字符

Java Cipher 解密中的奇怪字符

我的 Ajax 结果中的这个奇怪字符是啥

php中的字符串比较奇怪的行为