PerlによるCGIプログラミングテクニックのTips
しかし、近年急増したISPやホスティング・サービス等では、一般にメールアドレスのドメイン名には実ホスト名ではなく、MX用に登録されたドメイン名が使用されています。また、通常のサイトでも同様のDNS設定をしているところも増え、そのようなアドレスが書き込まれると実ホストではないので、上記の方法ではアドレスが正しくても「間違い」と判定されてしまいます。
別な方法としては、fingerを使って確認することもできましたが、fingerの不正使用のあおり等でfingerを使用不可にするサイトが増え、有効ではなくなっています。
最近では、DNSを利用して、MXレコードからそのドメイン名があるかどうか、あるいは、VRFY等を使ってユーザ名が存在するかどうか調べることが対応策として考えられました。しかし、DNSの設定等で常にMXレコードをセットしているとは限りませんし、VRFY等を禁止しているサイトもあります。また、VRFYが有効になっていても、ファイアウォール等で外部メールホストと内部スプールホストが分離されている場合などは、外部メールホストに問い合わせるようになるため通常有効になるでしょう。したがって、DNSを利用した確認方法も有効なメールアドレスかもしれないというレベルの確認に留まります。
ということで、書き込み時点では「確実な」チェック方法というものはないのではないかと思われます。
ある程度のタイム・ラグが許されるのであれば、一旦暫定ファイルに保管しておき、メーリング・リストの入会時のいたずら防止用に行われている、最初に認証番号を送付してその認証番号が返信されたら登録するという方法等を応用して、特定の返信メールがきた時点で表示可能なファイルに転記する等の手法が考えられます。エラーメールの返送でエラーを確認するという方法もありますが、最近ではSPAM対策の一つとしてエラーメールを返信せずそのまま廃棄する設定にしているサイトもあり、エラーメールの利用は確実とはいえません。
以上を踏まえたうえで、DNSを利用した対応策を取る場合、Perlではいくつかのモジュールが利用できます。
【入手先】
use Email::Valid;
print (Email::Valid->address('maurice@hevanet.com') ? 'valid' : 'invalid');
なお、Email::Validモジュールの実行にはMail::Addressモジュールと、Net::DNSモジュールあるいはnslookupユーティリティが必要です。【入手先】
【対策1】
本文の内容が同じ場合には連続投票ができないようにします。これは簡単ですが、相手にちょっとした工夫で対応される可能性が強く、決定打にはならないでしょう。【対策2】
掲示板のデータファイルの更新時間を調べて一定時間内であれば投稿させないようにします。
例えば、下記のようにすると、3分経たないと次の書き込みができないので、10件投稿するのに30分かかるようになります。if ( -M "/data-dir/bbs.dat" < 1/24/60*3) {
&error_sub('busy'); # &errorは別定義してあるエラー処理サブルーチン
}
<Takayuki Aokiさんに感謝>
【対策3】
対策2の応用ですが、IPアドレスを記録しておき、次の書き込みのIPアドレスが記録してあるIPアドレスと同じ場合は数分間書込ができないようにすると、一般の利用者には影響がでないので、さらに有効でしょう。
他の方法として、簡易版のMIME-Liteライブラリに入っているMIME::Liteモジュール(通常要追加)を使ってファイル添付から送信まで行ってしまう方法もあります。こちらは、「Perlモジュール活用ガイド」(翔泳社)のP.165-172で紹介されています。サーバにsendmailがない場合、代用のプログラムをセットしたり、libnetライブラリのNet::SMTPモジュール(通常要追加)を使う(他のSMTPサーバを利用)こともできます。MIME::Lite + Net::SMTPモジュールを使った簡単なサンプルをこちらにおいておきます。詳しくは同モジュールの添付ファイルの使用例等を参考にしてください。
または、以下のようにして<FORM>全体でacceptするcharsetを指定しておきます。
あるいは、enctype="MULTIPART/FORM-DATA"を指定します。
<form method="POST" action="URI" enctype="MULTIPART/FORM-DATA" lang="JA"
accept-charset=EUC-JP"> </form>
のような行を追加しておきます。
CGIには直接関係ありませんが、以下が参考になるケースもあるかもしれません。Yahoo! JAPANが実施している文字化け対策
http://www.yahoo.co.jp/docs/help/mojibake/sonota.htmlブラウザの文字化け対策http://www.yahoo.co.jp/docs/help/mojibake/index.html
ご意見、ご要望は 電子メール でお願い致します。
Perl初心者の部屋
へ戻る。