Formをhtmlに直接表示しないでcgiで別窓表示する

読者からのFeedbackを受け付けるためにホームページ上のコンテンツごとにメールフォームを貼っていた。 SPAM対策はしてあったがそれでもそれをくぐり抜けて攻撃されることが多くなったので、各ページにフォームを貼り付けるのはやめてCGIで表示させるようにした。

form.cgi
#!/usr/bin/perl

use Encode 'decode';
$subject = @ARGV[0];

print "Content-type: text/html; charset=utf-8\n\n";
print<<"EOF";
<form method="post" action="http://*******/send.cgi" onsubmit="return sendmail(this);">
<!--ここに$subjectに応じた画面表示用のfrom.htmlを書く -->
EOF

form.cgi?subject で起動させると、引数(例えばコンテンツ名)の値が @ARGV[0]; に保存される。 私の例では、$subject がそれになる。

form.cgiスクリプトの中で引数の値に応じて分岐させることで、引数に応じて全く異なる画面表示にすることも可能である。 私の場合は、各コンテンツのページタイトルを引数$subjectとして指定するようにしている。

Screenshot

form.cgi?みのるの日記 でアクセスした場合の表示画面をスクショで撮ったので貼っておく。

下の例では、「みのるの日記」 部分の表示が $subject によって変化するのである。