Click fraud, avagy védd az AdSense fiókodat stílusosan

Röviden összefoglalva a click fraud az a jelenség, amikor egy személy, vagy egy program rossz szándékkal egy fizetett hirdetésre kattint. A jelenség motiváló tényezőjének boncolgatását inkább a pszichológusokra bíznám, inkább valami másra koncentrálnék az elkövetkezőkben.

Egy-két oldalt és prezentációt átnézve egyre inkább úgy tűnik számomra, hogy az ipari méretű csalások mögött leginkább robot hálózatok állnak. Az oldalletöltések azonos IP-ről egyszerre akár több operációs rendszert azonosítva is érkezhetnek.

click fraud

forrás

A probléma ezzel a jelenséggel az, hogy vétlen hirdetés publikálók is áldozatául eshetnek a Google válaszának, az AdSense fiók felfüggesztésnek.

Pár óra alatt azonban sikerült valamiféle dögös megoldást összeeszkábálnom, amit így utólag végiggondolva nem sok teret fog engedni a click fraud kártékony jelenségének.

Első lépésként bemutatnék egy képzeletbeli AdSense kódot, hogy mindjárt bele is kezdhessünk hirdetői fiókunk biztonságosabbá tételébe.

<script type="text/javascript">
google_ad_client = "pub-xxxxxxxxxxxxxxxx";
google_ad_slot = "xxxxxx";
google_ad_width = 234;
google_ad_height = 60;
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

Így néz(ne) ki a te oldaladban is egy Google hirdetés, és a forráskód megjelenítésével ez bárki számára hozzáférhető. Kimásoltam az erre a domainre dedikált kódot, majd beillesztettem egy másik oldalamba és ott is megjelent a hirdetés. Itt már kezdődnek is a gondok. Ha bárki rossz szándékkal kimásolja a javascriptet és bárhová beilleszti, szabadon kattingathat, anélkül, hogy ez neked bármilyen (webstatisztika) módon is feltűnhetne.

Ez a gondolatmenet elvisz minket a legfontosabb lépéshez. A javascript külső, védett fájlba való átmozgatásához.

<script type="text/javascript" src="adsense-kod.js">
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

Ezt követően az adsense-kod.js-be helyezzük a kódnak ezen részletét:

google_ad_client = "pub-xxxxxxxxxxxxxxxx";
/* 234×60, létrehozva 2008.03.01. */
google_ad_slot = "xxxxxx";
google_ad_width = 234;
google_ad_height = 60;

Ezzel a lépéssel az AdSense kód külső fájlba került, de a javascript direkt elérését még nem akadályoztuk meg. Használjuk erre az hotlinking ellen is szükséges .htaccess kódot, a következő formában.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?seo.i-connector.com(/)?.*$ [NC]
RewriteRule .*\.(js)$ http://seo.i-connector.com/ [R,NC]

Ezáltal a .js kiterjesztésű fájlok csak a második sorban specifikált domain fájljai számára lesznek elérhetőek. Direkt eléréskor a harmadik sorban lévő URL lesz az átirányítás végállomása.

Következzék a második lépés, amely során aktív kattinós IP adatgyűjtésbe fogunk kezdeni. Az oldalad kódjában a Google hirdetést ilyen formán építsd be.

<form method="post" action="" id="ads">
<div class="ads">
<script type="text/javascript" src="adsense-code.js">
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
</form>

Lesz tehát egy ajax posztoló form, amely tartalmazza a hirdetés kódját.

A hirdetést taralmazó oldal head részébe kérlek illeszd be ezt a három sort, és már majdnem készen is leszünk.

<script src="mootools.js" type="text/javascript"></script>
<script src="control.js" type="text/javascript"></script>
<?php require "ads-controller.php" >

Amint a három fájlon szépen végigmentünk, addigra a védelem össze is áll (tartalmuk lementésekor kérlek nagyon ügyelj arra, hogy azt a szükséges fájlkiterjeszés megadásával illeszd az oldaladba).

mootools.js
Mootools.net-ről szabadon letölthető javascript keretrendszer.

control.js
Az AdSense hirdetést tartalmazó ads class-szal azonosított div felett végrehajtott egérkattintás (mousedown esemény) válaszául a div-et 800 milisecundum alatt teljesen átlátszóvá transzformálja, valamint vezérli az ajax posztolást az ip-log.php fájl futtatásaként.

Az ip-log.php fájl fogja végezni a statisztikai adatgyűjtést gyűjtést. A benne meghatározott limit változóval ($limit=1000;) indirekt módon szabályozható, hogy hányadik kattintást követően kerüljön a logfájl törlésre, azaz ismét kattinthatóvá válnak a hirdetések a korábban már kattintók számára.

Az indirekt szabályozás abból áll, hogy a logfájl mérete kerül összehasonlításra a limit változóval. Egy IP körülbelül 13 byte. 1000 osztva 13-mal durván 75 kattintás. Azt gondolom a logfájl törlésésére olyan nagyon égető szükségünk nincs is, hiszen a visszatérő látogatóid jellemzően a tartalmadra kíváncsiak, nem is igazán a hirdetések érdeklik őket, de a szkripted futását a fájlméretének növekedésével arányosan lassítani fogja, tehát inkább a fájlméret alapján válassz limitet, mintsem a kattintások száma alapján.

ads-controller.php
Működése roppant mód egyszerű, ha a látogató hirdetési kattantása miatt a logfájlba került, akkor az oldal töltődésekor eszközli a hirdetés eltűnését.

<script type="text/javascript">
window.onload = function()
{ new Fx.Style( "ads", ‘opacity’, {duration: 1000} ).start(1,0);}</script>

A szkript működését ezen a demo oldalon megtekintheted.

Kérlek, hogy ne kattints a hirdetésre, helyette Google Ads képre kattintva ugyanazt a hatást éred el!

Nyilatkozat:

  • a Google AdSense felhasználási feltételeit nem ismerem, ha valamelyik pontjával meglátásod szerint a megoldás ütközik kérlek tudasd velem,
  • a mootools hajlamos szkript ütközésre,
  • semmiért semmilyen felelősséget nem vállalok.

Ha a posztomat végig bírtad olvasni és megértetted, javaslom, hogy nyiss egy sört és dőlj hátra, mert rászolgáltál. 🙂

További kellemes napot kívánok!

12 thoughts on “Click fraud, avagy védd az AdSense fiókodat stílusosan

  1. sanyez

    Ez igen. Akkor most hátradőlök, betolok egy sört, aztán megpróbálom megvalósítani.

  2. skime

    Az AdSense felhasznaloi felteteleivel utkozik a beillesztendo kod barmifele megvaltoztatasa. Amugy pedig nincs igazad abban, hogy a kododat barhova felrakhatjak, es te nem fogsz tudni rola – az AdSense-en belul a beallitasoknal van egy menupont, ahol megadhatod, hogy mely oldalakon jelenhetnek meg a hirdeteseid, es kiirja neked, hogy hol jelentek meg meg.

  3. Bagi Zoltán Post author

    Skime, köszönöm a hozzásszólásod, hiszek neked. Nem vagyok egy nagy adsense felhasználó. Belenéztem a TOS-ba és ezt a rendelkezést találtam a kóddal kapcsolatban.

    Ön semmilyen módon nem módosítja az Ön számára a Google által biztosított JavaScript vagy egyéb programozást, hacsak erre nem kapott kifejezett, írásos (az elektronikus levelezést is beleértve) engedélyt a Google-tól.

    Ez szémomra nem jelenti azt, hogy a javascriptnek az oldalad html kódjában meg kell jelennie.

    Nagyon kíváncsi vagyok a véleményedre, mert tapasztaltAS használónak tűnsz számomra. Mit gondolsz, ha nem jelenik meg a javascript a html-ben, de nem módosítom (becsület szavamra mondom, és ellenőrizi is fogod tudni a valódiságát) az is ütközni fog a TOS-sal? Kérdezem ezt azért, mert tíz perc alatt átvariálható az egész.

  4. skime

    Hát, én mindenképp írnék a helyedben az AdSense magyarországi részlegének, és megkérdezném tőlük. Enélkül csak találgatni tudunk. Én az AdSense TOS-nak mindig a legkevésbé engedékeny értelmezését szoktam alkalmazni, és ha valahol nem így teszek, megkérdezem, hogy szabad-e, vagy utánanézek, hogy megkérdezte-e már valaki. (Az általad idézett rész régebben szigorúbban volt fogalmazva, a kapott kódot semmilyen módon nem változtathattam, ha jól értem, az új megfogalmazás lehetővé teszi például a megjegyzések törlését, tehát engedékenyebb.)

  5. Bagi Zoltán Post author

    Köszönöm a gyors válaszodat. Írni fogok nekik holnap, ma már nem, de tisztázni akarom a dolgot velük, mert nem szeretném, hogy fordítva hasson a védelem.
    Köszönöm mgegyszer!

  6. Sanyi

    Szerintem az alapvető probléma az, hogy a Google-nak lényegében érdeke, hogy kizárja a fiókokat, miután a kifizetendő összeg közelébe került. Így lehet, hogy a Google készíti a kattintó programokat.

  7. Bagi Zoltán Post author

    Sanyi, a feltételezésedet én a magam részéről elutasítom (a marha nagy kockázat miatt). Kértem az illetékesek állásfoglalását, kíváncsi leszek mikor/mit írnak válaszul.

  8. skime

    Sanyi, nem egeszen latom at, hogy miert erne meg a Googlenak megtartani parezer Ft-ot, ezzel elesve a kovetkezo evek beveteleitol…

  9. Tibi

    Sanyival azért sokan egyetértenek szerintem ! Személy szerint én is ismerek 3 olyan embert akinek akkor lötték ki a számláját mikor meghaladta a kifizetési küszöböt, vagy már a szélén volt ! Azért már ez nekünk is gyanus volt, de ezt soha nem tudod bizonyitani ugyanis egyoldalu a szerződés.

    Zoli, amugy reagáltak már ? / a szakértők 🙂 /

  10. Bagi Zoltán Post author

    Tibi, minden reggel azon izgulok, hogy küldtek-e levelet, de még sajnos semmi infóm nincsen. Azt azonban megígérem, amint kapok valamit, azonnal közkinccsé teszem.

  11. TLoF

    Az a baj, hogy ezzel igazából nem oldottad meg a problémát. Ugyanis gonosz szándékú támadóként összesen egyetlen egyszer kell megszereznem a kódotat azt pedig meg tudod tenni, csak kb 3 perccel tovább tart. (ennyi idő mire települ a firebug, és ujra indul a firefox, vissza jutok a lapodra.) Ha már egyszer sikeresen hozzá jutottam az id-hoz akkor ugyan úgy kimásolhatom a lapomra a kódot, és kattingtathatok vele.

    A google adsense fiókjában is van lehetőség, hogy beállitsd, hogy mely site-okról szeretnéd ha kattintható lenne a hirdetésed.

    Mivel azonban ez is referer alapján müködik túl sokat még itt sem kell tenni.

    Fogod magad és ha windowoson vagy akkor a c:\windows\system32\drivers\etc\hosts file-ba beirod hogy tamadniszandekozott.hu 127.0.0.1 és localhostban elinditasz egy xampp -ot. ott megcsinálod, hogy a másik lapról fent kimásolt js kód benne legyen a html-be és már kattingathatsz is bőszen.

    Vagy veszel egy firefoxot és egy referer hamisitő plugint hozzá, igy bárhonnan betöltheti a te javascriptedet a refer mindig a te oldalad lessz.

    Adjak még tippeket ?

  12. Bagi Zoltán Post author

    TloF, a legnagyobb baj a kommenteddel az az, hogy igaz, amit írsz.

    A referrer alapú átirányítás nem minden esetben működött helyesen, így felhajtottam egy másik lehetséges megoldást.
    A js fájlok http-accept értéke eltérő amennyiben, direkt vagy szkript indirekt elérés történik.

    Az legnagyobb probléma a dologban a firebug. Annak enabled státuszának detektálása még megoldható, de nem lenne túl elegáns erőszakkal kikapcsoltatni a firebugot.

    Ezt a vonalat mindaddig nem fogom követni, amíg az AdSense-es supportosok nem adnak választ, hogy ez belefér a TOS-ba, vagy nem fér bele.:)

Comments are closed.