[PHP-users 18240]Re: HTMLタグをユーザーレベルで入力してもらう場合の書式チェック&トラブル予防策

ISIGE, Akira xia @ silvia.com
2003年 10月 3日 (金) 16:02:22 JST


いしげ です.

On 2003/10/03 15:30:49 JST,
titi @ beefarm.jp <titi @ beefarm.jp> wrote:

>  「閉じタグのチェックを行えれば・・・」

自作の掲示板で行なった対応ですが,
「タグを許す → 閉じタグのチェックを行なう」ではなく,
「全てのタグを不許可 → 許されたタグだけを復元」という方式で
やったことがあります.

単純化した例でいうと,まず最初に htmlspecialchars() で無条件にサニタイズし,
その後に
<?php
 foreach( array( 'b', 'i', 's', 'tt' ) as $tag ){
   $html = preg_replace( "|&lt;{$tag}&gt;(.+?)&lt;/{$tag}&gt;|i", "<$tag>$1</$tag>", $html );
 }
?>
といったスクリプトでタグを「復元」してやってます.
<a> とか <font> とかの,属性を必要とするタグについては,
上記の正規表現だけではできませんが,これも似たような感じで,
それぞれのタグごとに「使っていい属性名」を用意しておいて,
それ以外はタグ内から消去しています.

ただし,タグの書き間違いとかがあると,救ってやるどころか,
タグの文字列がそのまま残ってしまうという見苦しいことになりますが...


--
ISIGE, Akira



PHP-users メーリングリストの案内