お問い合わせフォームを勝手に送信するロボットについて(スパム対策)

2017.08.29 20:22 ブログ

お問い合わせフォームを勝手に送信するロボットについて(スパム対策)の画像

ホームページにお問い合わせを設置していて、明らかにスパムと思われる送信がされていませんか?
こういうスパムが存在すると、大事なお問い合わせがあってもスパムと勘違いして無視してしまったりするかもしれません。
スパムが送られてメリットは何一つないので、スパム対策はしておいた方が良いでしょう。

スパムがどの様に送信されて、どの様に対策をしたら良いかを判明した範囲でご紹介致します。

対策するには、スパムがどの様に送信されているかを判断する必要があります。
そこで、下記の簡単に分かるものをスパム送信から取得してみました。
ユーザーエージェント」「リファラ」「IPアドレス」「POSTのパラメータ」「送信先URL

取得した値については下記です。

ユーザーエージェント:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
リファラ:
IPアドレス:82.202.○○○.○○○
POST:array("name" => email_rassylka, "message" => 'Review of the best mailing services on our page: https://○○○.○○○')
送信先URL:https://○○○.○○○/form/send/

どれも簡単に偽装が出来そうなものばかりです。
IPアドレスも国を調べてみると、モスクワとなっていました。
リファラは空ですね。

もうこの情報だけで対策が行えそうです。
ユーザーエジェントが上記のものと一致したら拒否や、リファラが空だったら拒否等でもう出来てしまいます。


しかし、私がやった対策はまた別になります。今回行った対策は上の内容は全く必要ありません!
では、なぜ記載したかというと、何となくです。


メインは、ここからになります。

まず、ロボットが送信先URLを取得するのに、「スクレイピング」を行います。
お問い合わせページのソースを取得して、あとはformタグを探してactionの中身を取得するだけなので、簡単に出来てしまいます。
最初からactionの中身を記述していると、簡単に抜かれて、送られてしまうという事ですね。
では、どの様に対策をするかという事ですが、JavaScriptで送信する直前にactionに送信先URLを記述してしまえば、良いのです。
 

var form = documentgetElementById('aaa');
target.action = "http://test.test";
target.submit();

実に簡単ですね。

しかし、これだけでは足りないのです
ロボットは巡回してきてフォームの送信先URLを取得すると、それを保持するのです。
なので、後からJavaScriptで変更しても、直接フォームの送信先URLに送ってくるのです。
上記対策だけでは、スパム送信はずっと絶えません。
では、どの様にしたら良いかと言いますと、フォームの送信先URLを変更しましょう
JavaScriptの対策もフォーム送信先変更のどちらもコードの変更はとても少なく済みます。

以上が今回おこなった対策になります!
急いでいたので、文章がだいぶゴタゴタしています。ごめんなさい><

最後に余談ですが、最近のロボットはJavaScriptも動かしてフォーム送信先を取得してくる様です。(今の所、上記対策でスパム送信は無くなりました)
なので、画像認証が必要になったり、特定のアクセスは拒否する等が必要になってきそうです。