« インストーラ | トップページ | 半角/全角の変換 »

2007-08-15

半角のみの書き込みを許さないCGI

ここ1, 2年で掲示板をかなり修正しています。
まず、禁止ワードを含む書き込みをチェックし、
禁止ワードを含む場合にはエラーを返すようにしました。
禁止ワードは、1行1ワードの正規表現で
別ファイルに登録するようにしました。
追加や修正、削除は、禁止ワードデータファイルに
正規表現を書く、削除する事で可能になります。
これで、しばらくの間は、スパムなども無く
無事だったのですが、
最近、海外からのスパムが増えてきました。
そこで、半角文字のみの書き込みを許可しないように
修正しようと思います。
色々と考えるのは面倒なので、
正規表現でベタにチェックするようにしました。
if ( $text !~ /[^\w\s\!\"\#\$\%\&\'\(\)\*\+\,\-\.
                 \/\:\;\<\=\>\?\@\[\\\]\^\`\{\|\}\~]/ )
  {
    error(7); # 半角文字のみのチェック
  }
errorはサブルーチンで、エラーメッセージをHTML出力して処理を終えます。
引数の7は出力メッセージ配列の添字です。
これで、一応半角文字のみの書き込みをブロックできたのですが、
この時考えていた、中国語やロシア語のようなマルチバイトで、
文字化けするような文字の場合にどう対処するか。
という問題が解決していません。
今現在は、
a[ ]+href[ ]*=
として、リンクタグを含む、書き込みを禁止ワードとしてブロックしています。
そもそも、http://で始まる文字列をリンクに置き換えているので、
リンク自体に問題は生じませんし、タグの使えない掲示板なので、
これでしばらく様子を見てみようと思います。

|

« インストーラ | トップページ | 半角/全角の変換 »

Perl」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 半角のみの書き込みを許さないCGI:

« インストーラ | トップページ | 半角/全角の変換 »