我的论坛被一些包含角色“ÿþ<”的机器人发送垃圾邮件(在使用iso-8859-1解码时)在其帖子中。没有链接,只是包含这些字符的随机文本。这是一个例子:
AZ情侣减少工作的事情我们你ÿþ<服务到忙,一个人得到男士获得ÿþ<评估只是购买数据信息,持续时间ÿþ<他们关于她重新参与的结果。业务有ÿþ<用户运行确保数据街道安全凤凰
它似乎是小于。之前的字节FF和FE。
我想开发一个Perl正则表达式来捕获这些字符,但我不知道该怎么做。任何人都可以就正则表达式提出建议吗?他们有什么目的可以发布这个?我知道xruner探测漏洞的网站,但这与我见过的任何论坛链接快捷方式都不相似。
答案 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<