- ベストアンサー
PHP内 メールアドレス 暗号化 必要性あり?スパム対策
こんにちは、 PHPファイル内に記述しているメールアドレスは、HTMLファイルに記述しているメールアドレスのようにメールアドレスを自動回収するクラウラーに回収されてしまうのでしょうか? もしそうであれば、PHPファイル内で下記のように変数として使用するメールアドレスを暗号化したいのですが、 >コード $mail = "example@example.com" 「example@example.com」を暗号化したいです。 >end コード $mailは、「mail」関数や「send_mail」関数等に格納してメール送信に使用しするので、今回の場合、メールアドレス(example@example.com)がブラウザーに出力される必要はありません。 PHPファイル内のメールアドレスを暗号化する場合、通常のHTMLを16進数に変更するソフトで暗号化(16進数化)すれば良いのでしょうか? ちなみに、HTMLメールアドレスを16進数に変更するソフトは、「HTMLエンティティ生成」を現在使用しています。 URL:http://ab.jpn.ph/soft/html_rand.html もしもHTMLを16進数に変更するソフトでのphpファイル内のメールアドレスの暗号化が不可能な場合、PHP内に記述されたメールアドレス(又はPHPコードを)暗号化するソフトや方法などをご紹介下さい。 よろしくお願いします。 キャサリン
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
失礼ですが、キャサリンさんはHTML(HTTP)の仕組み、およびPHPスクリプトの動作の仕組みをご存知でしょうか? もしご存知でしたら、ご心配しているようなことは原理的に起こりえないことがお分かりになるはずだと思います。 さきほど私の回答にも書きました通り、通常の設定であれば、PHPスクリプトの中身(ソース)に書いてある何か(例えばご質問の場合、メールアドレス)をブラウザやクローラーが見ることは「絶対に」不可能です。 PHPスクリプトが動作する仕組みをごくごく簡単にご説明しますと、 ●クライアント(ブラウザやクローラー)がリクエストを出す(たとえば http://example.com/test.phpにアクセスする) ↓ ●そのリクエストを受け取ったWebサーバ(Apacheなど)は、該当するスクリプト(この例の場合はtest.php)を実行する。(実際に処理するのはPHPのモジュールですが) ↓ ●実行した結果、何らかの出力があれば、Webサーバはそれを(多くの場合HTMLとして)クライアントに返す。この時点で、はじめてクライアントは何かしらの情報をサーバから得て、何かを画面に表示できるわけです。 上記のような仕組みで動作しているため、2番目の段階(スクリプトが実行される段階)でメールアドレスを出力する命令を出していない限り、スクリプトのソース内に書かれているメールアドレスがクライアントに伝わることは絶対にあり得ません。 もし、上記の説明でご納得されず、どうしても「クローラーがPHPスクリプトのソースを読めるのではないか」という疑いが解けないようでしたら、以下のようなスクリプトをサーバに置いて実験されてみてはいかがでしょうか? <?php //↓外部に公開してないメアドなら何でもいいので、書いておく $test = crawler-test@あなたのドメイン名 ?> もしもこれで、このメアド宛てにスパムが来れば、キャサリンさんのご心配しているような事態が実際に起こった、ということになります。 逆にこれでスパムが来なければ、そのご心配は杞憂だった、ということになります。 なお、 >サーバ側のHTMLファイル内のメールアドレスは暗号化されたもので、そのHTMLファイルがブラウザーに出力されたメールアドレス(正しいメールアドレスとして出力されます。)とは異なります。 ↑これにつきましてはちょっと意味が分かりかねます・・・。 最初のご質問で、 >今回の場合、メールアドレス(example@example.com)がブラウザーに出力される必要はありません。 とおっしゃっていたのですから、最終的にブラウザに渡されているHTMLにはメアドが含まれていないはずですよね。
その他の回答 (2)
- borazu
- ベストアンサー率53% (8/15)
>なぜサーバ側のHTMLファイル内のメールアドレスを暗号化しているとHTMLファイル内のメールアドレスがメールアドレス回収ロボットに回収されずにスパムメールが送られてこないのでしょうか? についてなんですが、メールアドレス回収ロボットを作ったこともないし、そのプログラムソースを見たこともないのでなんともいえないけども。。。 HTMLファイル内のメールアドレスがメールアドレス回収ロボットに回収されないのは、 HTMLソース内のtestmail@test-des.co.jpという文字列を回収対象にしているだけであって、 (1) testmail@test-des.co.jpを暗号化した、 (2) mailto:testmail@test-des.co.jpとか、 (3) testmail@test-des.co.jpとかは、メールアドレス回収ロボットからすると メールアドレスでは無いとして、回収対象外としているからなのではないでしょうか。
お礼
borazuさん ご回答ありがとうございました。 参考になりました。 キャサリン
- nick9090
- ベストアンサー率26% (102/378)
PHPファイル内のメールアドレスがクローラーに収集されるということは原則としてありえません。 サーバー(Apacheなど)がブラウザやクローラーからPHPファイルへのリクエストを受け取った場合、PHPスクリプトの内容を実行し、その結果出力されたHTMLを渡すだけです。 ですから、自分でメールアドレスをechoなどしていない限り、PHPファイル内のメアドは出力されません。したがってメアドがHTMLとしてブラウザに出力されないのであれば、暗号化する必要もありません。 ただし例外として、サーバーの設定や.htaccessの設定次第では、PHPファイルの内容そのものを出力してしまうことがありますので、ご注意ください。(でも、これは自分で意図的に設定しない限り、通常はそうはならないので、大丈夫だとは思いますが)。詳しくは「php htaccess addhandler」等で検索してみてください。
補足
nick9090さん ご回答ありがとうございました。 >メアドがHTMLとしてブラウザに出力されないのであれば、暗号化する必要もありません。 上記の点ですが、私の場合HTMLファイル内のメールアドレスはメールアドレス回収ロボットに回収されないように暗号化(16進数化)しています。つまり、サーバ側のHTMLファイル内のメールアドレスは暗号化されたもので、そのHTMLファイルがブラウザーに出力されたメールアドレス(正しいメールアドレスとして出力されます。)とは異なります。このようにしていると、HTMLファイルのメールアドレスがメールアドレス回収ロボットに回収されずにスパムメールが来ません。 もしもnick9090さんがおっしゃるようにクラウラーは出力されたHTMLだけを見ている(回収する)のならば、サーバ側のHTMLファイル内のメールアドレスを暗号化していても出力されたHTMLのメールアドレス(正しいメールアドレス)を回収してスパムメールが送られてくるはずですが、なぜサーバ側のHTMLファイル内のメールアドレスを暗号化しているとHTMLファイル内のメールアドレスがメールアドレス回収ロボットに回収されずにスパムメールが送られてこないのでしょうか? メールアドレス回収ロボットが出力されたHTMLのメールアドレス(正しいメールアドレス)ではなく、暗号化しているサーバ側のHTMLファイル内のメールアドレスを回収しているからではないのですか?もしそうならば、PHPファイル内のメールアドレスも暗号化の必要があるように思えますが? ご教授下さい。 キャサリン
お礼
nick9090さん ご回答ありがとうございました。 了解しました。 キャサリン