Perl正则表达式捕获垃圾邮件模式“ÿþ<”?

时间:2013-03-10 20:16:15

标签: regex perl

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

  

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

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

我想开发一个Perl正则表达式来捕获这些字符,但我不知道该怎么做。任何人都可以就正则表达式提出建议吗?他们有什么目的可以发布这个?我知道xruner探测漏洞的网站,但这与我见过的任何论坛链接快捷方式都不相似。

4 个答案:

答案 0 :(得分:7)

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

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

我可以想到两种进攻用途。两者都涉及在被另一个程序使用之前检查HTML是否存在恶意内容的情况。

  • 如果检查器在遇到FF FE时被欺骗切换到UTF-16le(因为它错误地认为它是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

答案 1 :(得分:2)

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

$string =~ m/\x{00FF}/;

答案 2 :(得分:2)

这个怎么样?

#!/usr/bin/env perl

use strict;
use warnings;

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

请参阅BOM

  

UTF-16(LE)FF FE 255254ÿþ

答案 3 :(得分:1)

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