0

我的论坛被一些在其帖子中包含字符“ÿþ<”(使用 iso-8859-1 解码时)的机器人发送垃圾邮件。没有链接,只有包含这些字符的随机文本。这是一个例子:

AZ夫妇减少工作的事情我们他们你ÿþ<服务很忙,一得到男士获取ÿþ<评估只需购买数据信息他们的持续时间ÿþ<他们关于她重新参与的结果。业务有ÿþ<用户运行确保数据街道安全凤凰

它似乎是小于之前的字节 FF 和 FE。

我想开发一个 Perl 正则表达式来捕捉这些字符,但我不太清楚该怎么做。任何人都可以就正则表达式提供建议吗? 他们发布此内容的目的可能是什么?我知道 xruner 会探测网站的漏洞,但这与我见过的任何论坛链接快捷方式都不一样。

4

4 回答 4

7

使用 UTF-16le 编码时,U+FEFF 变为 FF FE。

在文本的开头,U+FEFF 是 UTF-16le BOM。在其他地方,它是一个零宽度的不间断空间(也就是说一个不可见的、无功能的字符)。

我能想到两种攻击性用途。两者都涉及在 HTML 被另一个程序使用之前由一个程序检查恶意内容的情况。

  • 如果检查器在遇到时被愚弄切换到 UTF-16le FF FE(因为它错误地认为它是 BOM),则以下内容<将显示为与它不同的东西<,从而绕过对<. 这将允许\xFF\xFE<script>...</script>(例如)绕过对这些标签的检查。

  • 检查器可以正确确定<\x{FEFF}script(从 UTF-16le 解码)不是 HTML 元素,并允许<\x{FEFF}script>...</script>通过过滤掉所有 U+FEFF 实例的错误浏览器。这个浏览器会看到<script>...</script>哪里没有。


您可能计划删除字符,但这是个坏主意。删除会引入我上面提到的第二个安全问题。相反,您应该保留它们或将它们更改为U+FFFD

s/[\xFE\xFF]/\x{FFFD}/g
于 2013-03-10T21:06:56.037 回答
2

以下正则表达式应适用于多字节字符:

$string =~ m/\x{00FF}/;
于 2013-03-10T20:21:04.343 回答
2

这个怎么样?

#!/usr/bin/env perl

use strict;
use warnings;

{
    use bytes;
    /\xff\xfe\x3c/ and print "found\n" while <>;
}

物料清单

UTF-16 (LE) FF FE 255 254 ÿþ

于 2013-03-10T20:26:46.653 回答
1

此 RegEx 将匹配这些多字节字符:\xFF\xFE<

于 2013-03-10T20:26:54.900 回答