メールフォームのスパム対策

主な仕事はサーバー管理なんだけど、それだけじゃ普段する事がほとんどないので、最近は業務時間の7割くらいPHPで適当なプログラムを書いてる。

 ※1割は雑務、1割はサーバー管理、1割は寝てる<こらっ

 

実際、こっそりとお客様のサイトで動いてるPHPプログラムで最初に作ったのはメールフォーム。

世の中にはいっぱい便利なのや、使いやすいのがあるのだけどサイトデザインにあわせるのにPHPコードを書き直したり、マニュアル通りに設置しても動かなかったり、動いてもエラー吐きまくってたり・・・と、いろいろと面倒な事が多いので、えーい作っちゃえと思ってPHPをさわり始めたのがそもそもの始まりwww

 

ちなみに、会社で作ってるにも関わらずMKLのライセンスを書いてるとか、coreプログラムをmklcore.phpとかにしてるのは勝手しすぎですかねぇ(^^;)

 

 ※MKL・・・Media Kiss Lab

 

そのメールフォームにスパム対策コードを突っ込んでみた。

参考にしたのはこちらのサイト

 

考え方は、JavaScriptでフォームの隠し要素(hidden)のvalueに値を突っ込んで、配信PHP側で隠し要素に文字列が入ってなければメールを送らないようにする。

これで、プログラムで配信用のPHPにデータをポストして投げるようなスパムはJavaScriptを見て隠し要素に書かれる文字列がわからなければ送信出来ない。

まぁ、メモリーに展開してJavaScriptも実行するようなスパムの送信をされると意味はないのだけど(--;)

 

で・・・、

document.getElementById('form').value = 'securitycode';

こんなコードを使う事でvalue値を上書きする事が可能なのだけど、ここでちょっとはまった。
どんな風に書いてもそんなvalue値はありませ~んってエラーになる。

悩むこと1時間以上、理由がわかれば簡単な事なんだけど。。。
ホームページって、HEADがまず読まれて、読み込まれる外部スクリプトが実行され、その後にBODYタグ内が実行される。
なので、JavaScriptを実行した時はBODYタグ内で実行されるFORMタグは存在しないのでvalue値が見当たらずエラーになるようだ。

知ってる人からすると当たり前やん!って事だろうけど、素人なんで許してくださいwww

この場合、実行したい処理をfunctionにしてwindow.onloadで実行するなどしてページが表示された後に実行するとしてやらないといけなかった。
jQueryを使うとその辺をjQuery側で処理してくれるので楽なんだけど、メールフォームだけにjQueryを読み込ませるのも、どうなんだろうと思ってJavaScriptだけで解決してみた。

JavaScriptの事も少しわかった今日この頃です(笑)