危険なHTMLタグを削除する正規表現
ユーザ入力などから危険なHTMLタグおよび属性などを削除する正規表現。
preg_replaceで使用します。
不完全な箇所もあるかもしれないので、ご参考までに。
タグからstyle属性を削除
$pattern = '/style=[\"\']?[^>]*[\"\']?>/si'; $replacement = '>';
もしstyleの後ろに他の属性があったら、それも削除されますが、
「使わないでください」とお願いしてる環境でそんなもの入れる方が悪い、と割り切りました(笑)
タグからon****属性を削除
$pattern = '/on[\w]+=[\"\']?[^>]*[\"\']?>/si'; $replacement = '>';
もしon****の後ろに他の属性があったら(以下同文)
url(***)設定を削除する
$pattern = '/url\(.*\)/'; $replacement = '';
許可したタグ(WhiteList)のみを[][[]]括りに変換
$pattern = '/<(\/)?'. $tag. '(\s[^>]*)?>/si'; $replacement = '[$1'. $tag. '$2]';
変換結果は以下のようになります。
<font size="2" color="red">ふぉんと</font> ↓ [font size="2" color="red"]ふぉんと[/font]
タグは全部削除
$pattern = '/<[\/\!]*?[^<>]*?>/si'; $replacement = '';
参考サイト。色々な言語向けのHTMLタグをヒットさせる正規表現が掲載されています。
CodeS-SourceS - CCM