Hallo,

da das Thema NoScript und Cookies von Drittanbietern ja immer mehr zum Spektakel wird, hier mal ein kleiner Lösungsansatz, wie man dem als Webmaster entgegenwirken kann.

Zunächst eine Tabelle anlegen :

Code:
CREATE TABLE IF NOT EXISTS `vms_noscript_check` (
  `uid` int(11) NOT NULL default '0',
  `time` int(11) NOT NULL default '0',
  `ip` int(11) NOT NULL default '0',
  `browser` varchar(255) NOT NULL default '',
  `platform` varchar(255) NOT NULL default '',
  `scripts` tinyint(4) NOT NULL default '0',
  `cookies` tinyint(4) NOT NULL default '0',
  `bstring` text NOT NULL,
  PRIMARY KEY  (`uid`)
) TYPE=MyISAM;

Danach erstellen wir einen neuen Ordner im VMS-Verzeichnis und nennen ihn "klickcheck". Diesen Ordner versehen wir mit Schreibrechten. (CHMOD 666 oder 777)

Nun eine Datei, ebenfalls im Grundverzeichnis des VMS, und nennen sie klickcheck.php

Inhalt von klickcheck.php :

PHP-Code:
<?php
@require_once ('lib/functions.lib.php');

function 
entstuemmeln($derstummel$derkey) {
 
$derstummel base64_decode($derstummel);
 
$derstring "";
  for(
$i=0$i<strlen($derstummel);$i++) {
  
$derstring .= chr(ord($derstummel{$i})^ord($derkey{$i%strlen($derkey)}));
  }
 return 
$derstring;
}

$dieuid entstuemmeln($_GET['check'], $percode);
$dieuid2 base64_decode($dieuid);

$file6 './klickcheck/TEMP_'.$dieuid2.'.php';

if (
file_exists($file6)) {
@
unlink($file6);

$goto entstuemmeln($_GET['code'], $percode);
@require_once 
"lib/domaincheck.php";

    if (
in_array($goto$cd)) {

        if (isset (
$_SERVER['HTTP_REFERER']) && strpos ($_SERVER['HTTP_REFERER'], $domain) !== false) {
        
header ('Location: http://www.'.$goto.'/fbcheck.php?check='.$_GET['check']);
        }
    }
} else {

// Klickcheck fehlgeschlagen. Die Datei wurde aufgerufen, ohne das ein Klick gemacht wurde.
// Hier eventuelle Massnahmen einfügen.
// Zum Beispiel IP Adresse mit den Login-IPs oder den IPs aus der Tabelle vms_noscript_check abgleichen.

}
?>
Als nächstes brauchen wir eine weitere Datei im Ordner /lib/ : domaincheck.php

Inhalt von domaincheck.php :
PHP-Code:
<?php
$cd
[1] = 'domain1.de';
$cd[2] = 'domain2.de';
$cd[3] = 'domain3.de/unterordner';
$cd[4] = 'domain4.de';
?>
Hier kann man weitere Domains eintragen. Diese dann halt immer mit fortlaufender Nummerierung (also $cd[5] etc..). Man muß Sachen wie Javascript und Cookies leider über andere Domans prüfen, wie die, auf der das VMS liegt. Denn die Cookies, die über das VMS gesetzt werden sind keine Cookies von Drittanbietern und wenn User NoScript benutzen, dann werden sie eure Domain sicher freigegeben haben, weil sonst zum Beispiel beim Klicken die Banner nicht verschwinden. Wenn man mehrer Domains hat empfiehlt es sich eventuell auch erstmal 2 zu nehmen und diese bei Bedarf immer mal wieder auszutauschen.

Im nächsten Schritt erstellen wir dann weitere 2 Dateien :

1.) fbcheck.php :

PHP-Code:
<?php
@setcookie('control'md5($_SERVER['REMOTE_ADDR']), time()+60'/');
header ('Location: fbcheck2.php?check='.$_GET['check']);
?>
In dieser Datei wird zunächst ein Cookie gesetzt. Cookiename und Inhalt könnt ihr beliebige anpassen. Anschliessend wird auf folgende Datei weitergeleitet :

2.) fbcheck2.php :
PHP-Code:
<?php

if (!isset($_GET['check'])) $_GET['check'] = '';

function 
create_code($code_laenge$zeichen) {
 
srand((double)microtime()*1000000);
 
$created_code '';
  for (
$i=0;$i<$code_laenge;$i++) {
  
$n=rand() % strlen($zeichen);
  
$created_code .=substr($zeichen$n1);
  }
 return 
$created_code;
}

function 
verstuemmeln($derstring$derkey) {
 
$stummel "";
  for(
$i=0$i<strlen($derstring);$i++) {
  
$stummel .= chr(ord($derstring{$i})^ord($derkey{$i%strlen($derkey)}));
  }
 return 
base64_encode($stummel);
}


$percode         'Euer Code';    // hier den Code aus eurer functions.lib.php eingeben 

if (isset($_COOKIE['control']) && $_COOKIE['control'] == md5($_SERVER['REMOTE_ADDR'])) {
$chars "123456789";
$gcode create_code('8',$chars);
$scode verstuemmeln($gcode$percode);
setcookie('control'''time()-60'/');
} else {
$chars "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$gcode create_code('8',$chars);
$scode verstuemmeln($gcode$percode);
}

?>

<html>
<head>
<noscript><meta http-equiv="refresh" content="0; url=http://www.eureseite.de/fbreturn_false.php?check=<?=$_GET['check'];?>&cookis=<?=$scode;?>"></noscript>
<script type="text/javascript">
window.location.href='http://www.eureseite.de/fbreturn_true.php?check=<?=$_GET['check'];?>&cookis=<?=$scode;?>';
</script> 
</head>
<body>

<p>&nbsp;</p>
</body>
</html>
In dieser Datei müßt ihr den percode anpassen und natürlich die Domain eurer Seite. Wenn ihr vorher den Cookienamen etc. geändert habt, dann auch hier die Anpassungen vornehmen.

Diese beiden Dateien müssen dann auf jede Domain, die ihr in der Datei lib/domaincheck.php angegeben habt, aufgespielt werden.

Nun müssen wir wieder 2 Dateien erstellen.

1.) fbreturn_true.php :
PHP-Code:
<?php
@require_once "lib/functions.lib.php";
@
db_connect();

if (!isset(
$_GET['cookis'])) $_GET['cookis'] = '';
if (!isset(
$_GET['check'])) $_GET['check'] = '';


function 
entstuemmeln($derstummel$derkey) {
 
$derstummel base64_decode($derstummel);
 
$derstring "";
  for(
$i=0$i<strlen($derstummel);$i++) {
  
$derstring .= chr(ord($derstummel{$i})^ord($derkey{$i%strlen($derkey)}));
  }
 return 
$derstring;
}

$uid entstuemmeln($_GET['check'],$percode);
$uid base64_decode($uid);
$browser get_browser(nulltrue);
$cokes entstuemmeln($_GET['cookis'],$percode);
$uid = (int)$uid;

if (
intval($cokes) > 0) {
$coke 1;
} else {
$coke 2;
}


db_query('UPDATE `vms_noscript_check` SET time = '.time().', ip = '.ip2long($_SERVER['REMOTE_ADDR']).', browser = "'.addslashes($browser['parent']).'", platform = "'.addslashes($browser['platform']).'", scripts = 1, cookies = '.$coke.', bstring = "'.addslashes($_SERVER['HTTP_USER_AGENT']).'" WHERE uid = '.$uid.' LIMIT 1');
if (
mysql_affected_rows() == 0db_query('INSERT INTO `vms_noscript_check` (uid, time, ip, browser, platform, scripts, cookies,bstring) VALUES ('.$uid.', '.time().', '.ip2long($_SERVER['REMOTE_ADDR']).', "'.addslashes($browser['parent']).'", "'.addslashes($browser['platform']).'", 1, '.$coke.',"'.addslashes($_SERVER['HTTP_USER_AGENT']).'")');
@
db_close();
?>

2.) fbreturn_false.php

PHP-Code:
<?php
@require_once "lib/functions.lib.php";
@
db_connect();

if (!isset(
$_GET['cookis'])) $_GET['cookis'] = '';
if (!isset(
$_GET['check'])) $_GET['check'] = '';


function 
entstuemmeln($derstummel$derkey) {
 
$derstummel base64_decode($derstummel);
 
$derstring "";
  for(
$i=0$i<strlen($derstummel);$i++) {
  
$derstring .= chr(ord($derstummel{$i})^ord($derkey{$i%strlen($derkey)}));
  }
 return 
$derstring;
}

$uid entstuemmeln($_GET['check'],$percode);
$uid base64_decode($uid);
$browser get_browser(nulltrue);
$cokes entstuemmeln($_GET['cookis'],$percode);
$uid = (int)$uid;

if (
intval($cokes) > 0) {
$coke 1;
} else {
$coke 2;
}

db_query('UPDATE `vms_noscript_check` SET time = '.time().', ip = '.ip2long($_SERVER['REMOTE_ADDR']).', browser = "'.addslashes($browser['parent']).'", platform = "'.addslashes($browser['platform']).'", scripts = 2, cookies = '.$coke.', bstring = "'.addslashes($_SERVER['HTTP_USER_AGENT']).'" WHERE uid = '.$uid.' LIMIT 1');
if (
mysql_affected_rows() == 0db_query('INSERT INTO `vms_noscript_check` (uid, time, ip, browser, platform, scripts, cookies,bstring) VALUES ('.$uid.', '.time().', '.ip2long($_SERVER['REMOTE_ADDR']).', "'.addslashes($browser['parent']).'", "'.addslashes($browser['platform']).'", 2, '.$coke.',"'.addslashes($_SERVER['HTTP_USER_AGENT']).'")');


@
db_close();
?>
Diese beiden Dateien kommen ebenfalls in das Grundverzeichnis eures VMS.

Jetzt müssen wir nur noch eine kleine Änderung in der fc.php machen . Vor diesen Zeilen :
PHP-Code:
@db_close();
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
folgendes einfügen :

PHP-Code:
$frame3 '';
$zufallstest rand(1,50); // Höhere Zahl = Weniger Checks
if ($zufallstest == 10) {
function 
verstuemmeln($derstring$derkey) {
 
$stummel "";
  for(
$i=0$i<strlen($derstring);$i++) {
  
$stummel .= chr(ord($derstring{$i})^ord($derkey{$i%strlen($derkey)}));
  }
 return 
base64_encode($stummel);
}
$jcheck verstuemmeln(base64_encode($_SESSION['uid']), $percode);
@require_once 
"lib/domaincheck.php";
$zufall rand(1,count($cd));
$ged verstuemmeln($cd[$zufall], $percode); 
$frame3 '<frame name="check" src="klickcheck.php?check='.$jcheck.'&code='.$ged.'" scrolling="no" frameborder="0">';
$file5 './klickcheck/TEMP_'.$_SESSION['uid'].'.php';
$arr 'Test';
$fopen=@fopen($file5,"w");
@
fwrite($fopen,$arr);
@
fclose($fopen); 

Und weiter unten diese Zeilen :

PHP-Code:
<frameset rows="75,*" border="0">
<frame name="abuse" src="topframe_forced.php?id=<?=$forced['id'];?>" scrolling="no" frameborder="0">
<frame name="werbung" src="<?=$forced['ziel'];?>" scrolling="auto" frameborder="0">
folgendermassen ergänzen :
PHP-Code:
<frameset rows="75,*,0" border="0">
<frame name="abuse" src="topframe_forced.php?id=<?=$forced['id'];?>" scrolling="no" frameborder="0">
<frame name="werbung" src="<?=$forced['ziel'];?>" scrolling="auto" frameborder="0">
<?=$frame3;?>
Nun habt ihr in der Datenbank (Tabelle `vms_noscript_check`) alles was ihr benötigt. Was ihr damit dann macht ist eure Sache. Ich habe es bei mir zum Beispiel so geregelt, das ich je nach Resultat des Checks, den User einstufe.

Javascript : 2 und Cookies: 2 -> Stufe 1
Javascript : 2 und Cookies: 1 -> Stufe 1
Javascript : 1 und Cookies: 2 -> Stufe 2
Javascript : 1 und Cookies: 1 -> Stufe 3

Genauso habe ich die Sponsoren in den Interfaces eingestuft. Ein Sponsor, der weder Javascript, noch Cookies benötigt ist Klasse 1, einer der nur Javascript, aber keine Cookies benötigt ist Stufe 2 und ein Sponsor, der sowohl Javascript , als auch Cookies benötigt ist Stufe 3. Die jeweilige Sponsorstufe speichere ich für jede Kampagne zusammen mit den restlichen Daten in der Kampagnentabelle ab. Im Klickbereich werden dann Stufe des Users und die Stufe der Kampagnen abgeglichen und nur Kampagnen angezeigt, die der Stufe des Users entsprechen. Das muß natürlich auch in den Klickdateien geprüft werden.

Das ganze mal als Ansatz von meiner Seite aus. Auch, wenn es natürlich keine 100%ige Sicherheit ist, läßt sich die Wirksamkeit nicht bestreiten. Die Vergütungsraten (also die Anzahl Klicks die auf der Seite gemacht wurden im Verhältnis zu den klicks, die bei den Sponsoren gewertet wurden) sind mehr als nur sprunghaft angestiegen. Bei manchen Sponsoren bin ich mit dem EIgenverdienst mittlerweile runtergegangen auf 10%.

Ich hoffe, es kann der eine oder Andere etwas mit damit anfangen. Vielleicht hat ja auch jemand Lust das ganze als Addon zu schnüren oder mit weiteren Optionen etc. zu versehen und in den Downloadbereich zu stellen. Würde mich freuen.

Gruß
Marco

P.S.: Selbst wenn ihr eure Vergütungsraten damit deutlich verbessern könnt, noch ein kleiner Tip: Baut nicht wie wild jetzt wieder Sponsoren ein. Die Sponsoren, die so einen Mist wie Cookies von Drittanbietern verlangen, sind schuld, das solche Massnahmen überhaupt erst nötig werden. Und auch wenn man die meisten mit diesem Script wieder annähnernd nutzen könnte, sollte man vorsichtig damit sein. Denn wenn sich sowas allgemein etabliert, ist das ein Freibrief für die Sponsoren alles Mögliche für die Vergütung eines Bannerklicks zu fordern.