http://www.pet-thailand.com/formmail.txt
(txtファイルとしてアップしています。)
上記フォームメールを長年使用していますが、
最近は英語圏の自動ソフトによる、スパムメールが多く
とても困っています。
送られてくる、スパムメールは、ほとんどが
フォームに設置しているtextarea に、URLを書き込む形で
フォームを送信してきます。
私の場合、textareaにurlが書き込まれたフォームは
全く必要としないのですが、これらtextareaに、URLを含むメールを
排除できないものでしょうか?
(フォームの他の箇所でも、URLを必要とする箇所はありません。)
"http://"を含むフォーム送信を禁止する等、
何か加工方法、アイディアがあれば、教えていただけると助かります。
どうぞよろしくお願いします。
(1)GETによるパラメータ送信は拒絶し POSTのみ受け取るようにするだけでも、かなり減ると思われます。
フォームHTMLのほうでGETを利用しているのであれば、そちらもPOSTに変更する必要があります。
if ($ENV{'REQUEST_METHOD'} eq 'GET') { # Split the name-value pairs @pairs = split(/&/, $ENV{'QUERY_STRING'}); } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { # Get the input read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Split the name-value pairs @pairs = split(/&/, $buffer); } else { &error('request_method'); }
↓↓↓↓↓
if ($ENV{'REQUEST_METHOD'} eq 'POST') { # Get the input read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Split the name-value pairs @pairs = split(/&/, $buffer); } else { &error('request_method'); }
(2)件名が空白だったり半角英文だけで構成されているような場合は拒絶するようにすれば、さらに減ると思われます。
if (defined($Config{$name})) { $Config{$name} = $value; }
↓↓↓↓↓
if (defined($Config{$name})) { if (($name eq 'subject') && ($varue =~ /[^\x80-\xff]/) { &error('request_method'); } $Config{$name} = $value; }
(3)本文にURLを含んでいれば拒否して良いというのであればさらに減るとは思いますが、
上記2点があれば、もしかしたら不要かもしれません。
else { if ($Form{$name} ne '') { $Form{$name} = "$Form{$name}, $value"; } else { push(@Field_Order,$name); $Form{$name} = $value; } }
↓↓↓↓↓
else { if ($varue =~ /http:\/\//) { &error('request_method'); } if ($Form{$name} ne '') { $Form{$name} = "$Form{$name}, $value"; } else { push(@Field_Order,$name); $Form{$name} = $value; } }
※以上、動作確認はしておりません。
※(2)は文字コードEUC-JPの場合です。他の場合は変更が必要です。
※エラー表示のほうは追加してませんので、どこで引っかかっても同じエラー処理が動きます。
※プロバイダの迷惑メールフィルタもあわせて使う事をお勧め。
ご回答ありがとうございます。
大変恐れ入りますが、たとえば
全ての入力箇所(textarea, radio bottun 等々)で、入力された値が
半角英数の場合に、拒否するような、加工方法を合わせて教えていただけると、とても助かります。
どうぞよろしくお願いします。