入力フォームの達人、弓削田です。
かつて、EFOというジャンルを築いて、WEBページの入力フォームについての技術知識が半端なく構築された僕ですが、
入力フォーム系スパムが、まあまあキツイという話を知り合いから聞くようになったので、EFOお作法の次は、
スパム対応やセキュリティも研究してみたいと思います。
今回は、自社で立ち上げたwebページで、少しうざいスパムが連発した事があったので、
その対応と、技術アイデアなどをブログを書きながら考えてみたいと思います。
WEB開発の人はで、こうしたことにお困りの人がいたら参考にしてもらえると幸いです。
入力フォームスパムとは
クローリングと聞くと、GoogleのSEOが頭に浮かぶ人も多いかと思いますが、IPアドレスや、想定ドメインなどからのクローリング処理って、
WEBプログラミングが出来る人であれば、簡単に構築できてしまいます。
そして、その中にformタグが存在した時に、そのフォームの送信を行うという処理も比較的簡単に作れます。
これを、企業のwebページに対して行えば、テレアポをするよりも簡単に、営業メールを送信できて、
詐欺まがいのスパムメールよりも見てもらえる確率の高い営業活動ができてしまうというワケですが、
こうした事で、企業に対する営業メール送信をカウントしているウザメール配信の営業代行業者があるようです。
受け取る企業としては、顧客からの問い合わせかと思えば、営業メールであるため、すぐにゴミ箱にダンクシュートされてしまうオチですが、
正直ゴミ箱に入れるという行為すら無駄に思えてくるので、できれば、こうしたスパム投稿は防ぎたいと考えるでしょう。
残念なことに、こうしたスパム送信は、海外のモノが多いので、それも踏まえて対応策を考えたいところです。
お問い合わせフォームのスパム送信を防ぐ方法
お問い合わせフォームの内容に関していくつかの方法がありますが、
基本的には、必要情報が書かれていることを前提に送信ができるような仕組みにすることで、
ある程度の無駄な送信は次の策を使って防ぐことができます。
- 入力フォームページのjavascriptを使って、EFO対策をする方法
- 送信データを受け取るサーバーサイド処理で、バリデーションチェックを行う方法
- Googleの、ReCaptureを使う方法
上から順番に簡単な方法にしてますが、個人的にはお金のかからないサービスで行う事が重要なので、
上記のサービスを有償で行っているサービスもありますが、上記の組み合わせを手作りで行うという事で考えてみます。
入力フォームページのjavascriptを使って、EFO対策をする方法
入力フォームのEFOは、基本的に、書かれる文字の種類や、内容に対して送信ボタンを無効化したり、エラー表示をするという
キーボード入力のサポートの役割なんですが、
入力内容のバリデーションチェックを、動的に行うことができるという、どのサイト独自の機能も有することができます。
入力内容に特定のキーワードがあるとエラーにしたり、チェックボックスの組み合わせで、送信対象外を判定したりすることができますが、
スパムクローラーは、実は入力をして送信をしているわけではないので、このJavascriptのEFOでは対応できない場合がほとんどなんですが、
具体的には、ページが開いた直後に、入力フォームのvalue箇所に自動的に文字列を入れてそのままsubmit関数を実行しているので、
EFOバリデーションなど無意味になります。
という事で、実はEFOだけでスパム対応はほぼできないという結論になりました。
Googleの、ReCaptureを使う方法
GoogleがReCaptureというツール(今現在は、ver2)を一定量までは無料で使えるので、これを利用している企業も多く見かけます。
ただ、実際にやってみると、設定が意外と面倒くさいのと、単純に送信ボタンを押す時に、画像に書かれた文字列が読めるということで人間判定を
しているだけの操作なので、これをわざわざ他ドメインのツールを導入してやるというのがめんどくさく感じてしまいます。
もちろん、こうしたチェックに引っかかった数(スパム数)などの、ボリュームをロギング計算してくれるというツールメリットはありますが、
なんとなく、個人的には、自作したいな〜と思っていたので、この方法も除外。
送信データを受け取るサーバーサイド処理で、バリデーションチェックを行う方法
自力でできてしまう対策としては、やはりEFO+サーバーサイドでの対応として、ReCaptureのようなフローを作り上げるのがいいかと思います。
要するに、機械的にsubmit関数を実行できなくようにするだけで、簡易なspamは排除できるので、入力フォームのformタグに対して、
form.submit = funciton(){return false;}
form.onsubmit = funciton(){return false;}
これを書いてあげると、クロール送信はできなくなります。
でも、同時に、送信ボタンを押しても送信ができなくなるので、submitする条件を判定して(EFOバリデーション)ajax機能でデータ送信をする
という方法が、良いでしょう。
ちなみに、僕の作った入力フォームページは、この処理だけで、スパムはほぼ壊滅させられました。
有償サービスいろいろ
もう少しスマートで汎用的にやりたい場合は、ReCaptureみたいな画像判定を手動で作ってみるのもいいですし、
capy社のパズルキャプチャなども、分かりやすくて有効だと思われます。
最近では、「電話番号」を使った
オスティアリーズ社の「着信認証」というおもしろいサービスもあり、
成果はでているようですが、所詮は有償サービスなので、中小企業で使うのは厳しいかもしれません。
あくまでセキュリティとしての参考にしてみてください。
とにかく、目的は、スパム投稿の防止なので、掲示板やSNSなどの投稿など、こうしたサービスにおいても有効な方法になるので、
開発者は自分なりの定番手法を持っておくということは重要かもしれませんね。
0 件のコメント:
コメントを投稿