まだ重たいCMSをお使いですか?
毎秒1000リクエスト を捌く超高速CMS「adiary

2006/05/25(木)タグの認識を正規表現で

一昔前の掲示板などで利用出来るタグを制限できるものがありますが、それと同等のモジュール(自作)をadiaryでは使用しています。属性値を認めると途端にタグの解析が難しくなります。

#!/usr/local/bin/perl
use strict;

my $inp = join('', <>);
while($inp =~ /(<\w([^>"']|[=\s\n]".*?"|[=\s\n]'.*?')*?>)/s) {
	$inp = $';
	print "$1\n";
}

だいたいこれでタグを認識できますが、IE/Firefox/Operaなどで色々確認した結果、壊れた(不正な形式の)htmlタグの解釈は統一されておらず、結局、その辺の仕様まで完全にサポートすることは非常に難しく、そこをつつけば、この手のタグ制限ルーチンの解析を避けて、ブラウザに対し不正なタグを認識させる(XSSする)ことが可能なようです。