[PHP] Google Analytics のアクセス偽装方法を実装してみる [FuelPHP]

<p><img class="hatena-fotolife" title="f:id:makoto1899:20150121152037j:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/makoto1899/20150121/20150121152037.jpg" alt="f:id:makoto1899:20150121152037j:plain" /></p>
<p>なんか、あるサイトのアクセス解析をしているのだが、Google Analytics の解析と、実サーバのアクセスログの値が、10倍ぐらい違う。なにこれ!? って感じだけど、人気サイトであると思わせたいのかな～と。まあ、良いか。</p>
<p><a href="http://f14s.pw/">FavoritesFollows</a> (欧州サッカーNEWSををTwitterにつぶやくBot)で、どうしてもクリック解析がしたくて、短縮URLシステムまで構築し、Google Analytics の軽いハックまでした経験から、Google Analytics のアクセス偽装方法を実装してみる～を解説します。</p>
<p><!-- more --></p>
<p>前提条件!</p>
<ul>
<li>PHP5.3が動くサーバ</li>
<li>PHPの言語知識</li>
<li>FuelPHPの知識or学習意欲</li>
<li>Google Analyticsの知識</li>
<li>Contab で定期自動実行が出来る</li>
</ul>
<p>では!</p>
<p>キーポイントは、<a href="https://github.com/thomasbachem/php-ga">Server-Side Google Analytics PHP Client</a> です。これは、Google AnalyticsをJavaScriptではなく、PHPから直接トラッキングを発行することが出来ます。超訳するとPHPで、「ここからアクセスされたんじゃー」をGoogle Analyticsサーバに送りつける事が出来ます。</p>
<p>ソースは、こちら!</p>

```php
/**
 * GoogleanAlyticsトラッキングを、PHPで強引に送信する
 * 
 * @param type $long_url
 * @param type $title
 * @param type $remote_addr
 * @param type $http_user_agent
 */
public static function googleanalytics_track($long_url, $title, $remote_addr, $http_user_agent)
{
    // Initilize GA Tracker
    $tracker = new GoogleAnalytics\Tracker(\Config::get('googleanalytics.key'), \Config::get('googleanalytics.domain'));

    // Assemble Visitor information
    // (could also get unserialized from database)
    $visitor = new GoogleAnalytics\Visitor();
    $visitor->setIpAddress($remote_addr);
    $visitor->setUserAgent($http_user_agent);

    // Assemble Session information
    // (could also get unserialized from PHP session)
    $session = new GoogleAnalytics\Session();

    // Assemble Page information
    $page = new GoogleAnalytics\Page(str_replace("http://", "/", $long_url));
    $page->setTitle($title);

    // Track page view
    $tracker->trackPageview($page, $session, $visitor);
    
}
```

<ul>
<li><span style="line-height: 1.5;">$long_url は、アクセス先偽装したいURLをそのまま挿入。</span></li>
<li>$title は、アクセス先偽装したいページタイトルをそのまま挿入。</li>
<li>$remote_addr は、IPアドレスを入れます。どこからアクセスされたかを偽装できます。</li>
<li>$http_user_agent は、UAを偽装します。</li>
</ul>
<p>たとえば、スマホ(iPhoneとか)のアクセスで、3大キャリア(ドコモ/au/SoftBank)からのアクセスだと偽装したい場合、$remote_addr は</p>
<ul>
<li><a style="line-height: 1.5;" href="https://www.nttdocomo.co.jp/service/developer/smart_phone/spmode/index.html">作ろうスマートフォンコンテンツ : spモードサーバ情報 | サービス・機能 | NTTドコモ</a></li>
<li>
<p><a href="http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html">KDDI au: 技術情報 &gt; IPアドレス帯域</a></p>
</li>
<li>
<p><a href="https://www.support.softbankmobile.co.jp/partner/home_tech1/">Web技術情報 | SoftBank スマートフォン サービス開発支援サイト | ソフトバンク</a> </p>
</li>
</ul>
<p>から、任意のIPアドレスを埋め込めばOK! ただし、固定だとGoogle Analyticsの解析で分かるので、ランダムにしないとダメです。</p>
<p>$http_user_agent は</p>
<p><a href="http://www.au.kddi.com/developer/android/kishu/ua/">User Agent | Android(TM) 技術情報 | au</a></p>
<p>を抜き出せば、良いと思います。iPhone に最新はこんな感じらしい。</p>
<blockquote>
<p>Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A405 Safari/600.1.4</p>
</blockquote>
<p> また、Google Analytics上の解析で、JavaScript によるアクセス偽装をした場合、一番バレやすい点として、画面の解像度があるのですが、php-ga では設定できます。</p>

```php
$visitor->setScreenResolution('1024x768');
```

この 1024x768 の文字列を、UAがiPhoneならiPhone用の解像度に。UAがXperiaなら、Xperia用の解像度に設定してください。(ちなみに、これは JavaScript では出来ないようです...本当!?)

あと、念には念を入れる方は、画面の色 も設定しましょう。

```php
$visitor->setScreenColorDepth('32-bit');
```

とか設定すればいいらしい。(詳しくは、判らないので、調べてね～)

リファラー(Referrer)が無いと、怪しまれるな。

```php
$page->setReferrer($referrer);
```

で、$referrer の部分に、アクセス元に偽装するURLを埋め込んで下さい。Google Analytics は、アクセスルートも解析するので、重要ですよ!

以上で、FuelPHPで「Google Analytics のアクセス偽装方法を実装してみる」でした。悪用しないでね!じゃ!