企業で運営している販売促進用のサイト(問い合わせフォーム)には日々様々なメールが届きます。それは個人用のブログでも同じことと思います。中にはいたずらや迷惑メールを意図的に送信する悪意のあるメールも含まれます。そういった悪意あるスパムメールはどこから送られてくるのか、興味があり調査できないかをウェブ上で調べて対策を行うことにしました。
会社に届くいたずら目的の迷惑メール
会社の問い合わせメールに毎日特定の企業名、氏名、連絡先、メールアドレスでいたずら目的のメールが届くことがありました。着信した問い合わせ内容に記載されている会社や連絡先に連絡してもいつも不通となっていたり、記載されている住所には実際にはその会社名が存在しなかったりと明らかに嫌がらせと思われるメールでした。
誰がなんの目的でどこから問い合わせフォームにいたずらをしてきているのか、全く見当もつきませんでした。
会社ではリスティング広告を行い新規顧客開拓を行っており、それらのいたずら目的の問い合わせにも少なからず広告費が無駄に費やされている可能性もあり、対策を検討することになりました。
ウェブ上で対策の調査を進めると多少違えど同じような事象で困っている会社がたくさんあることがわかりました。
しかし、送信元となる相手がどこの誰であるか分からないと何の対策もできません。
まずはどこから送付されているのか、その場所を特定するにはどうしたら良いかを調べることにしました。
問い合わせフォームにアクセスするタイミングを把握する
いたずら目的のスパムメールを送信するには問い合わせフォームに何かしらの方法で情報を入力し送信ボタンを押している可能性があります(実際には問い合わせフォームを飛ばして機械的に直接スパムメールを送信する方法もあるようですが、、)。
そこでまずは相手を把握する糸口を得るため、悪意ある第三者がその問い合わせフォームにアクセスしたタイミングでのアクセス解析情報を取得することができないかを検討することにしました。
インターネットを利用するにはIPアドレスというインターネット上の住所のようなものが必要となりますが、そのIPアドレスを調べることでその問い合わせフォームにアクセスしている会社の場所や企業名を特定できれば何かしらの対策がとれるのではないかと考えました。
IPアドレスの仕組み
先ず大まかにIPアドレスがどのように(誰によってどういった分類で)管理されているかを調べることにしました。
IPアドレスの管理の仕組みについては、株式会社シーマン(CMAN INC)様の公式サイトがとてもわかり易く説明されていましたので参考にさせていただきました。
図解すると、全世界のIPアドレスは以下のようにIANAという組織が全てを管理しており、更にアジア太平洋地域を管理するAPNIC、その下に日本国内のIPアドレスを管理するJPNICという組織があるでした。よって、IPアドレスの頭部分の数字がわかるだけでも国内(のIPアドレス)なのか、海外なのかが分かるそうです。
参照元:株式会社シーマン「IPアドレスの管理階層」より抜粋
https://www.cman.jp/network/support/IP_list.html
株式会社シーマン「IPアドレスの管理階層」
更に日本国内のIPアドレスはJPNICからISP(インターネットサービスプロバイダー)などが管理する企業や個人のIPアドレスへと割り振られることとなります。
また、IPアドレスには種類があり、プライベートIPアドレス、グローバルIPアドレスがあります。
https://www.cman.jp/network/term/ip/
株式会社シーマン「IPアドレスの種類」「グローバルIPアドレスとプライベートIPアドレスの違い」
各企業がインターネット回線を利用するためには、それぞれにグローバルIPアドレスが割り振られているため、このグローバルIPアドレスを調査することで厳密には個人情報までは特定できないまでもそのIPアドレスが属する地域や場所、あわよくば企業が特定できるのではないかと考えました。
IPアドレスを取得するには
今回はアクセス解析ツールGoogleAnalyticsを使って、問い合わせフォームにアクセスしているアクセス元のIPアドレスを調査する方法を実装してみることにしました。
問い合わせフォームにアクセスしているアクセス元のIPアドレスを調べるには問い合わせフォームのHTMLコード内のソースコードに一部修正を加える必要があります。
その前に先ず、GoogleAnalyticsの設定から見てみましょう。
GoogleAnalytics側の設定
- 1,Googleアナリティクスでカスタムディメンションを作成
- 「ホーム」>「管理」
プロパティ設定>「カスタム定義」>「カスタムディメンション」をクリック
※閲覧権限では設定できません(管理者権限で設定を行う必要があります)
- 2,「ip_address」と「access_time」のカスタムディメンションを作成
- 「新しいカスタムディメンション」をクリック
・名前:ip_address(任意ですが後ほど問い合わせフォームのソースコードに入れる文言とも統一)
・範囲:ユーザー(「セッション」でも良いです)
・アクティブ:チェックを入れる
最後に「作成」ボタンをクリック
同じ要領で「新しいカスタムディメンション」をクリックし「access_time」のカスタムディメンションも作成します。
・名前:access_time
・範囲:ユーザー(「セッション」でも良いです)
・アクティブ:チェックを入れる
最後に「作成」ボタンをクリック
追加が完了すると一覧が表示されます。
「カスタムディメンション名」と「インデックス番号」はあとで問い合わせフォームのHTMLソースに挿入するタグ情報に記載する番号と名前となります(メモしておくと良いでしょう)
以上の手順で2つのカスタムディメンション(「ip_address」「access_time」が作成されました)
これでGoogleAnalytics側の設定は完了です。IPアドレスとそのIPアドレスがアクセスした日時が記録するための事前設定となります。
問い合わせフォームのソースコードを編集
次に問い合わせフォームのHTML内のコードを編集しますが、その前にGoogleAnalytics側にIPアドレスとアクセス日時を渡すための特定のファイルをサーバー内の問い合わせフォームのHTMLファイルが設置されている場所と同じ階層に設置します。
IPアドレスはJavascriptでは取得できないようですので、PHPファイルで取得して、Javascriptの変数としてGoogleアナリティクスに渡す方法があるようです。
今回はウェブ上で公開されていた、PHPファイルでIPアドレスを取得し、Javascriptの変数として出力する方法を参照させていただきし設置することとしました。
IPアドレスを取得するコード
+++++
↓ここから下
<?php /* ** Javascriptとして実行して下記のデータを取得する ** ・IPアドレス ** ・日付 */ $ipaddress = $_SERVER["REMOTE_ADDR"]; $accesstime = date("Y/m/d H:i:s"); ?> getIPAddress = function() { return '<?php echo $ipaddress; ?>'; } getAccessTime = function() { return '<?php echo $accesstime; ?>'; }
↑
ここまで
上記のコードをPHPファイル(ganalytics.php)として問い合わせフォームのHTMLファイルが置かれているサーバーの同じ階層に保存します。
GoogleAnalyticsのトラッキングコードの編集
ホーム>管理>プロパティ>トラッキング情報>トラッキングコードで現在問い合わせフォームソースコード内(head内)に設置されているタグ
ウェブサイトのトラッキングコード、つまりグローバルサイトタグ(gtag.js)を確認する。
以下はあくまでもグローバルサイトタグの参考例(UA-●●●●●●-●●にはそれぞれ各自のサイトに設定された番号が入ります)
<!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-●●●●●●-●●"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-●●●●●●-●●'); </script>
これを以下のように編集します。
先ず冒頭に以下を付加
<!-- GET IPAddress Accesstime --> <script type="text/javascript" src="ganalytics.php?v=1"></script> このコードは先程問い合わせフォームのHTMLファイルと同じ階層に設置した「ganalytics.php」ファイルで取得したIPアドレスとアクセス日時の情報を呼び出す内容が書かれています。 その上で <!-- Global site tag (gtag.js) - Google Analytics -->以下のように編集 <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-●●●●●●-●●"></script <script> window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);} gtag('js',new Date());gtag('config','UA-●●●●●●-●●',{'custom_map':{'dimension●●(インデックス番号)':'ip_address','dimension●●(インデックス番号)':'access_time',},'ip_address':getIPAddress(),'access_time':getAccessTime(),}); </script> つまり、編集されたGoogleアナリティクスのグローバルサイトタグをまとめると以下のようなコードになります。 ここから ↓ <!-- GET IPAddress Accesstime --> <script type="text/javascript" src="ganalytics.php?v=1"></script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-●●●●●●-●●"></script <script> window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);} gtag('js',new Date());gtag('config','UA-●●●●●●-●●',{'custom_map':{'dimension●●':'ip_address','dimension●●':'access_time',},'ip_address':getIPAddress(),'access_time':getAccessTime(),}); </script> ↑ ここまで
※「インデックス番号」にはそれぞれGoogleAnalytics側にカスタムディメンションを作成した際に設定された’ip_addressとaccess_timeそれぞれの「インデックス番号」が入ります。
※’ip_addressとaccess_timeもそれぞれGoogleAnalyticsへのカスタムディメンション作成時に設定した名前(文字列)と同じものを入れる必要があります。
※上記編集したGoogleAnalyticsのグローバルサイトタグを問い合わせフォームのソースコード内の現在GoogleAnalyticsのタグが入っている部分に貼りかえます(現在設置しているタグを上書きし差し替えます。追加で2つのGoogleAnalyticsのタグが同じページ内に入ってしまうとそれぞれが干渉してしまい正しくIPやアクセス日時が取得できません)。
IPアドレスが正しく取得されGoogleAnalyticsに反映しているか検証
GoogleAnalyticsはデータ取得まで数時間かかりますのでコードを編集し設置した翌日にデータ反映を確認する必要があります。その前に実際にIPアドレスが正しく取得できGoogleAnalyticsグローバルサイトタグに受け渡しがされているか(設定したgtagに値がわたっているか)をすぐに検証することができます。
Googleアナリティクスのグローバルサイトタグ(gtag)に、値がちゃんと入って反映できているのかを確認したい場合は、GoogleChromeの拡張機能「Google Analytics Debugger」を使います。
実際に問い合わせフォーム内のソースコードを見ながら、IPアドレスやアクセス日時が取得され、GoogleAnalytics側のdimention●●(インデックス番号)に渡している値を確認できます。
- 1,Google Analytics DebuggerをChrome拡張機能からインストール
- Chrome拡張機能検索で「Google Analytics Debugger」を検索し実装します。
- 2,問い合わせフォームをウェブ上で開く
- 問い合わせフォームをウェブ上で開いた状態で右クリックし、検証をクリック(ディベロッパーツールを開き)し、Consoleを開くと
どのようにGoogleAnalyticsに情報が受け渡しされるか、受け渡しされる以下のような情報が表示される。
Running command: ga(“gtag_UA_●●●●●●●_●●.send”, “pageview”, {dimension●●: “1●●.●●●.81.●●●(自分のIPアドレスが表示される)”, dimension●●: “2022/05/16 ●●:●●:16(アクセスした日時が表示される)”, hitCallback: [function]})
analytics.js:●● User has opted out of tracking. Aborting hit.
IPアドレスやアクセス日時がGoogleAnalyticsに受け渡しする情報として反映されていれば取得、反映は正しく行われるはずです。
GoogleAnalyticsでIPアドレスとアクセス日時を確認
最終的にGoogleAnalyticsにはどのように表示されるかを確認してみましょう。
ホーム>カスタム>カスタムレポートをクリック
表示されるカスタムレポートの中に先程作成したカスタムディメンションがあるのでそれをクリック
カスタム レポート>IPアドレス
問い合わせフォームへのアクセス日時とIPアドレスが取得できています。
では取得特定されたIPアドレスをどのようにスパム対策に活用すれば良いのでしょうか。
次回考えてみたいと思います。
尚、今回のIPアドレス、アクセス日時のGoogleAnalytics設定、PHPなどのHTMLソースは先駆者の方のブログを参考にさせていただきました。
大変わかりやすく読みやすく、初心者にも大変参考になる素晴らしいページですので皆様も参考にされると良いと思います。
実際にはそれらのコードをそのまま実装したところ、データが反映されないことがありましたため、自社用に一部編集を行った上で記載させて頂いております。
参照元サイト(とても素晴らしい有益なブログです!)
https://wporz.com/googleanalytics-get-ipaddress/
【2022年版】GoogleアナリティクスでIPアドレスを取得して表示する方法