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.
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!
Ez igen. Akkor most hátradőlök, betolok egy sört, aztán megpróbálom megvalósítani.
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.
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.
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.
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.)
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!
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.
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.
Sanyi, nem egeszen latom at, hogy miert erne meg a Googlenak megtartani parezer Ft-ot, ezzel elesve a kovetkezo evek beveteleitol…
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 🙂 /
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.
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 ?
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.:)