
この記事では、サイトの訪問カウンターがどのように巻き上げられ、人口統計、場所、および監視サービスのその他のパラメーターが偽装されているかを伝えたいと思います。
カウンターはどのように機能しますか?
ページが読み込まれると、カウンターサーバーへのHTTPリクエストの送信を開始するJavaScriptコードをホストします。
これは、データが送信されるヘッダー内の1回限りの要求、またはより多くの統計を送信する定期的な要求のいずれかです。
テスト対象として、「シンプルな」ヒットカウンター、liveinternetを使用しました。
httpを解析
ページがロードされると、jsカウンターは統計付きの画像のGETリクエストを送信します。 同時に、URLでクライアントデータの一部を渡します。

クエリ文字列をデコードすると、次のような結果が得られます。
http://counter.yadro.ru/hit?t54.6;rhttp://RefererName.com/;s1920*1080*24;uhttp://SiteName.com/;hSite Header;0.5985211677780615
「;」で区切られた多数のパラメーターがあります。つまり、モニターのサイズと解像度、遷移ページ、リクエストが行われたURLとページタイトル、および一意の訪問を保証する乱数です。
CookieとUser-Agentもhttpヘッダーに送信され、サーバーはユーザーの人口統計(だけでなく)とブラウザーのバージョンをそれぞれ通知します。
これらのデータはすべて、ユーザーを集合的に識別します。
理論から実践へ
クエリはCurlを使用して生成できますが、jsに問題があり、各カウンターに対して個別のクエリを作成する必要があります。
コンソールでPhantomJS -WebKitを選択しました。
ユニークな訪問をカウントする簡単なスクリプトを作成します。
var page = require('webpage').create(); var system = require('system'); var url = system.args[1]; page.open(url, function(status) { console.log("Status: " + status); phantom.exit(); });
一部のカウンターでは訪問もカウントされますが、これは予想されたものとはまったく異なります。
ユーザーエージェントとリファラー (移行元のページ)をインストールします 。
最初は非常に簡単に行われます:
var userAgent = 'Custom UA'; page.settings.userAgent = userAgent;
2番目のタスクはもう少し複雑です。 事実は、単にhttpヘッダーにRefererを記述した場合、カウンターは遷移をカウントしません。 「実際の」トランジションの場合、リンクをクリックするだけで、jsイベントが処理されます。
コード var page = require('webpage').create(); var system = require('system'); var url = system.args[1]; var userAgent = 'Simple UA'; page.settings.userAgent = userAgent; var expectedContent = '<a id="link" href="' + url + '">link</a>';
page.setContentを使用して、ドメインとページのコンテンツをエミュレートするのは面白いです。
実際、jsカウンターを取得して、ページの本文に配置し、Webサーバーですべての操作を実行できます。
画面解像度を変更する
次に、画面解像度、色数などの追加パラメーターを変更します。
PhantomJSには、トラフィックをその場で変更できる機能があります。
page.new_resolution = "800x600x24".split('x');
残念ながら、この関数はGETリクエストのみを処理しますが、実験にはこれで十分でした。
人口統計とCookie
空のCookieですべてを行うと、カウンターはビューをブロックし、禁止をスローします。
さらに、Cookieは比較的「古い」ものでなければなりません(1日以上)。
グラバーを作成し、ネットワーク上の人気のあるサイトを「歩き回り」、大量のCookieを保存しました。
PhantomJSでは、Cookieは--cookies-fileスイッチで接続されます 。
phantomjs --cookies-file=/path/to/cookies.txt
人口統計学では、すべてが非常に簡単です。「ユーザー」には性別と年齢が設定されるので、一般的なリソース(mail.ruメールアカウントを取得しました)にログインする必要があります。
驚くべきことに、私がサイトを「歩き回った」とき、ほとんどのサイトからdoubleclick.netからのCookieが保存されていました。 彼女は広告の提案を担当しています(2007年にGoogleはこの会社を31億ドルで買収しました)。
場所を変更
ロケーションの置換では魔法はありません。IPを変更する必要があります。
PhantomJSはプロキシをサポートしています。 --proxyスイッチを使用してプログラムを実行する必要があります。
phantomjs --proxy=ip:port
まとめ
Google Analytics、Yandex Metric、Liveinternetなどの一般的なカウンターをインストールしました。
彼らは皆、ビューを数えました。 Yandex Metricでは、ロボットの存在を確認できます。そこで、彼女は偽のリクエストを確認します。
誰が気にかける: 既製のスクリプト 。