9月になりましたね。本日は防災の日。
ということで、Webサイトの防災という意味で、スパムメールへの対策を考えます(無理やり)。
前回エンティティ化したものをエディターでも記述できるようにショートコードにしてみる、というやり方を提案しましたが、そのときに「それって対策として不十分でしょ」ということも合わせて書いていました。
なぜなら、エンティティ自体は割と簡単に元に戻せてしまうからです。
メールアドレスを収集しているロボットもいろいろでしょうが、エンティティぐらいでは対策にならない、という意見も聞きます。
より高度な対策としてあげられていたのがJavascriptでの暗号化です。
前回参考URLとして記載したサイトで生成が可能です。
http://www.luft.co.jp/cgi/coding.php
これはもちろん直接WPのエディターでは入力不可なので、この場合はテンプレートに書く、などの利用方法になると思います。筆者は自作関数にしてテンプレート内で使う、という方法を取っています。※適切かどうかは検証していませんのでサンプルコードの記載は控えます。
ちなみに、上記の方法も、前回紹介したエンティティでの方法も、あくまでメールアドレス収集ロボットへ向けた対応ですので、人間がメールアドレスを収集しようとした場合や人為的ないたずら行為については全くの無力ですので、あらかじめご了承ください。
この後は蛇足になりますが、メールアドレスを掲載する理由ってなんだろう、と考えました。
もちろん、メールでお問い合わせする可能性を設けておく、ということと思いますが、それってどんな場合だろうか。急を要する問い合わせの場合は悠長にメールしないだろうし、予約なんかもメールより電話の方が良い場合もあるかもしれない。メールでなければならない場面も、往々にしてあると思うけれど・・・ちょっと具体的な想像が乏しい。採用のエントリーとか?でもそれはもうすでにメールフォームが必要っていう域な気がしますし。
メールアドレスの収集は、上記の通り、完全には防げないです。ただロボットによる収集が困難であればスパムメールが送られる可能性は低くなるので、有用な対策と言えます。昨今、人力でメールアドレスを収集しているとも思えませんし。ただし、やはり悪意のある人が自分のブログやSNSなどでメールアドレスを掲載するなどした場合は同じことでしょう。
ならばメールフォームにしてしまってはどうか、という場合。これなら確かに、メールアドレスは公開されないのでロボットに収集されることもありません。悪意の人物によるいたずらは防げませんが、それは、言ったらきりがないです。善意と悪意の人間を見分けることはできないので。
ただし、これでありがちなのが「メールフォームならSSL通信が必要だ!」という風になることだと思います。その場合、これも調べて納得したのですが、サーバとブラウザの通信をSSLと暗号化で保障したとして、サーバーからメールを平文(暗号化されていない通信)で送ったのなら同じことだよね、ということのようです。(以前にプログラマさんにも同じ指摘をされたような記憶がありますが、ころっと忘れていました。)
参考にしたのは右のサイト。http://blog.ks-product.com/contact-form-ssl/
(コメントでご指摘いただいたので、追記です。上記の参照サイトで「SSLではサーバーとメーラー間の暗号化はサポートされません。」と記載があるのですが、「フォームをSSLで暗号化してもサーバーとメーラー間の暗号化はされません。メールのSSL暗号化が別途必要です。」というのが、正確なところだそうです。詳しくはコメントをご確認くださいっ。2015.09.07追記)
えーでも、メールって暗号化されないのー??と思って調べてみたのですが、ちょっとこれがよくわからず。誰か詳しい方ご教授くださいませ。
メールフォームの場合はメールの内容を安全なサーバーに留め置き、メールで送るのは「問い合わせがありましたよ」のお知らせだけで、問い合わせ内容はサーバ、データベースで暗号化された環境で確認する、ということになるようです。ちなみに、FTPも平文で通信だとか。SFTPやFTPSなどを利用のこと。
だので、メールフォームにSSL通信が必要か?ということになってくると、メール自体が平文で通信しているなら、メール送信の代案としてのメールフォームにSSLって必要なくないですか、って思う。
暗号化されてないなら「暗号化してないです」って示した上で、個人情報を書き込まないでください、とやるしかなくないか。それでも構いませんな問い合わせもあるわけで(例えば取材の申し込みとか?)それ以外の場合は結局「電話でやりとり」になっちゃうんじゃないの、と思ってしまう。上記で参考にあげたサイトで書いているのも、そういうことなんだと思う。
もちろん、「SSLとかいらなくないですか」っていうのは、機密事項や重要な個人情報とかではない内容に限った話であって、会員登録とか、先にあげた採用のエントリーとか、ショッピングになってきたら話は全く別で、暗号化とかセキュリティとか厳しく考えないといけないと認識してます。
脱線しましたが、メールアドレスを掲載する、とかお問い合わせフォームの設置とかって、なんとなく、その辺の「お客様とのやりとり」みたいなのを具体的に描いてから検討しないと、のせておけばいい、みたいなのってどうなんだろうって思ってしまう。連絡先として「載せておかなきゃいけない」程度だったら、画像で良いわけじゃないですかね(操作性悪いけど、逆にメールで問い合わせ来てほしくないという意思は示せるかもね!)。どうしてもメールで問い合わせしたい人は、たとえ画像だったとしても、舌打ちしつつ、メールすると思う。少なくとも私はそうだ。
どう想定して何を選ぶかっていうことって、どの程度考えればいいものでしょうねーと思ったのでした。
SSLには少しだけ詳しいので、メール暗号化についてコメントしますねー。
紹介されてるサイトで、
「SSLではサーバーとメーラー間の暗号化はサポートされません。」
と書いてありますが、これは誤解を生む表現です。正確に書くと、こんな感じかと思います。
「フォームをSSLで暗号化してもサーバーとメーラー間の暗号化はされません。メールのSSL暗号化が別途必要です。」
SSLでメールを暗号化することは可能です。でもWebの暗号化とは全然別の設定になります。たとえば、さくらインターネットのマニュアルにこんな解説があります。
https://help.sakura.ad.jp/app/answers/detail/a_id/2248
メールの場合は少し厄介で、以下の2段階で分けて考えます。
・送信の暗号化:送信元から受信者のメールサーバーへ届くまで
・受信の暗号化:受信者のメールサーバーからメールソフトに届くまで
前者は、Webサーバーのメール送信機能の設定をいい感じにすることで可能です。解説サイトも色々あるはずです。
問題は後者で、これはユーザーがメールソフトの設定をどうしているか次第なのです。iPhoneはデフォルトで暗号化有効になりますが、Outlookなんかは明示的に設定してあげないと暗号化受信になりません。
ということで「メールの暗号化が出来ない」と言い切るのは誤りで、正しくは「メールの暗号化は半分は受信者任せなので、確実に暗号化メールを送ることは保証できない」という感じですね。
詳しい解説ありがとうございます!
ちなみに、「これはユーザーがメールソフトの設定をどうしているか次第」っていう部分で、Gmailとかを使うと暗号化されて受信できるとかあるのでしょうか?Google Appsを使っている、というのを最近ちらほら聞いていて、その辺り含めて一回検討しないとなあ、と思っておりまして・・・。
またお時間あるときに、ぜひお教えください!
ちなんでコメント。
管理人はさくらインターネットのサーバーを利用しているのと、実際この記事を書く際に確認したので、本筋とはずれるのですが、ちょっぴし補足です。
https://help.sakura.ad.jp/app/answers/detail/a_id/2248
自分のメールの暗号化を確認してみたとき、上記のマニュアルページも参照しましたが、「暗号化の対象となるドメイン:本機能では初期ドメイン(*.sakura.ne.jp)のみが暗号化の対象となります。」と書いてありました。(そらそうや)
独自ドメインはメールの暗号化は使えないのか。
https://help.sakura.ad.jp/app/answers/detail/a_id/2326
独自ドメインのSSLを取ったら出来るのか?とか思ってみたものの、現時点ではちょっと調べきれず・・・。
安全な運用として受信側の暗号化はどうすれば可能なのか引き続き調べてみますー。