0

私のフォーラムは、投稿に文字「ÿþ<」(iso-8859-1を使用してデコードされた場合)を含むボットによってスパムされています。リンクはありません。これらの文字を含むランダムなテキストのみです。次に例を示します。

AZカップルは私たちの仕事を減らします彼らはあなたが忙しいサービスにサービスを提供します。ビジネスはÿþ<加入者を実行し、データストリートのセキュリティを確保しましたフェニックス

より小さい前のバイトFFおよびFEのように見えます。

これらの文字をキャッチするためにPerl正規表現を開発したいのですが、その方法がよくわかりません。誰かが正規表現についてアドバイスできますか? 彼らはこれをどのような目的で投稿するのでしょうか?xrunerがサイトの脆弱性を調査していることは知っていますが、これは私が今まで見たフォーラムリンクのショートカットとは似ていません。

4

4 に答える 4

7

UTF-16leを使用してエンコードすると、U+FEFFはFFFEになります。

テキストの先頭では、U+FEFFはUTF-16leBOMです。他の場所では、それはゼロ幅のノーブレークスペースです(つまり、目に見えない、機能のない文字です)。

私は2つの不快な使用法を考えることができます。どちらも、HTMLが別のプログラムで使用される前に、あるプログラムによって悪意のあるコンテンツがないかチェックされる状況を伴います。

  • チェッカーが遭遇したときにUTF-16leへの切り替えにだまされた場合FF FE(BOMであると誤って信じているため)、以下<はそれ以外のものとして表示され<、のチェックをバイパスします<。これにより、\xFF\xFE<script>...</script>(たとえば)これらのタグのチェックをバイパスできます。

  • <\x{FEFF}scriptチェッカーは、 (UTF-16leからデコードされた)がHTML要素ではないと正しく判断し<\x{FEFF}script>...</script>、U+FEFFのすべてのインスタンスをフィルターで除外するバグのあるブラウザーを通過できるようにします。このブラウザは<script>...</script>、存在しない場所を認識します。


あなたはおそらく文字を削除することを計画していますが、それは悪い考えです。削除すると、前述の2番目のセキュリティ問題が発生します。代わりに、そのままにするか、U+FFFDに変更する必要があります。

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

これはどう?

#!/usr/bin/env perl

use strict;
use warnings;

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

BOMを参照してください:

UTF-16(LE)FFFE255254ÿþ

于 2013-03-10T20:26:46.653 に答える
2

次の正規表現は、マルチバイト文字に対して機能するはずです。

$string =~ m/\x{00FF}/;
于 2013-03-10T20:21:04.343 に答える
1

この正規表現は、これらのマルチバイト文字と一致します。\xFF\xFE<

于 2013-03-10T20:26:54.900 に答える