栃木県のJavaエンジニア、WEBプログラマーのためのサイト

2016.12.28たった2行でメールフォームにスパム対策

「メールフォームからスパムが送信されてくる。」

そんな相談をされる事があります。

以前の投稿で、簡易な画像認証(CAPCHA)の実装について述べました。

その中で「本来は受け側のCGIで認証チェックしないと意味がないです」などと偉そうに書いておいて、
そのままほったらかしなのもなんなので、パパッと実装しましょう。

メールフォームの送信処理の直前や、バリデーションの処理などに、
下の処理を差し込んでください。(PHPサンプル)

  //スパム野郎は生まれた場所に帰れ
  if(!$_SERVER['HTTP_REFERER'] || stripos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) === FALSE)
      header("Location: ".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:"http://".$_SERVER['HTTP_HOST']));

厳密に言えば、REFERER は以外と簡単に偽装できるので、完璧に防げるわけではないです。

ですが

そこまで偽装してくるような涙ぐましいスパマーからの送信なら、
甘んじてゴミ箱に受け入れてあげてるのも大人の優しさではないでしょうか。

それではよいお年を。