2018-11-05 formmail

Formをcgiで表示させ引数によって表示内容を変える

読者からのFeedbackを受け付けるためにホームページ上のコンテンツごとにメールフォームを貼っていた。

SPAM対策はしてあったがそれでもそれをくぐり抜けて攻撃されることが多くなったので、各ページにフォームを貼り付けるのはやめてCGIで表示させるようにした。

引数の値に応じて自由に画面表示用のHTMLを書いて send.cgi に渡すことができる。私の場合は引数としてベージに応じたsubjectを指定するようにしている。

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 として扱うことでどのコンテンツからのFeedbackかを区別できる。

画面表示

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

Title(みのるの日記)部分の表示が $subject によって変化するのである。

2018-11-05 formmail