PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JavaScript: Besuchertausch Framebrechersicher Popup, NoPopup + Restart Popup Version



Worka
27.02.2008, 15:34
Hallo
Hier mein Code zum absichern eines Besuchertauschers gegen Framebrecher und gegen hängenbleiben. (Test auf Hängenbleiben nur in Version 1)

Bitte beachten: Ich habe es lokal getestet, habe aber keine Seite wo ich es online testen kann.
Weitere Infos unten.

Das Script:

1. Version mit Popup.

1. StartBT.htm (Diese Seite im Browser laden)
Öffne diese Datei im Brower um das Script zu starten. In einem echten BT müsste der Code auf der Seite eingebaut werden, von der aus man BT aufruft.
Will man den direkten Aufruf des BT erlauben (z.B. aus den Lesezeichen), so muss man eine Startseite machen, die per JavaScript den BT nach Aufruf startet. (Punkt 6)



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Besuchertausch starten</title>

<script type="text/javascript">

function StartBT () {
window.open("Kontroll_Popup.htm", "Framebrecher Meldung", "width=10, height=10");
}

</script>

</head>
<body;>

</body>
Besuchertausch <a href=""
onClick="StartBT();">Starten</a>
</html>
2. Frameset.htm
Das Frameset. In einem echten Besuchertauscher wäre das das Dokument welches sich hinter der SurfURL verbirgt.
Es lädt einen oberen Frame (Vergütungsframe) und einen unteren (Werbung).



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>

<head>
<title>Frameset</title>

<frameset rows="300,*">
<frame src="Vergütung.htm" name="ab">
<frame src="ad.htm" name="werbung">
</frameset>

</head>

<body>
...
</body>

</html>
3. Vergütung.htm
Der Vergütungsframe. Hier einfach nur ein Dokument ohne jede Funktion.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Vergütungsframe</title>
</head>

<body>
Ich bin der Vergütungsframe
</body>
</html>
4. Ad.htm
Der Framebrecher. Er wird im unteren Frame des Frameset geladen.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Framebrecher</title>
<script type="text/javascript">
if (top != self) {
top.location = self.location;
}
</script>
</head>
<body bgcolor="#000000" text="#FFFFFF">

<h1>Framebrecher</h1>

</body>
</html>
5. Kontroll_Popup.htm
Dieses Popup enthält den Framebrecher test und den Test ob der BT gestoppt hat. Verweilt der BT länger als 200 Sekunden auf der selben WerbeKampange, so lädt er erneut.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Kontroll Popup</title>



<script type="text/javascript">
//Variablen
//Austauschen gegen SurfURL des Besuchertauschers
var FramesetURL="Frameset.htm";
//----------------------------------------------------
var Counter;
var wegcount;
var win;
var Restartcount=0;
var StopCount;
var MaxCount=200;
var Wo1=0;
var Wo2;
var X;
var Y;
var Z;

//Start des Scriptes
function start() {
//URL bestimmen
X = self.location.href;
// von self.location.href den eigenen Dateinamen abschneiden
// weil "Kontroll_Popup.htm" 18 Zeichen hat hier: -18
Z = X.length - 18;
Y = X.substring(0, Z) + FramesetURL;
//Start
win = window.open(FramesetURL, "Besuchertausch", "width=800,height=600, status=1");
Counter=setInterval("Wachen()", 1000);
wegcount=setInterval("Restart()", 1000);
}

//Restart bei Popup close
function Restart() {
Restartcount++;
if (Restartcount > 5) {
win = window.open(FramesetURL, "Besuchertausch", "width=800,height=600, status=1");
}
}

//Überwachung
function Wachen() {
//Framebrechertest
if (win.location != Y) {
win = window.open(FramesetURL, "Besuchertausch", "width=800,height=600, status=1");
StopCount=0;
}
Restartcount=0;
//Stopper Test
Wo2=win.frames[1].location;
if (Wo1==Wo2) {
StopCount++;
}
else {
Wo1=Wo2;
StopCount=0;
}
if (StopCount>MaxCount) {
win = window.open(FramesetURL, "Besuchertausch", "width=800,height=600, status=1");
StopCount=0;
}

}

function stop() {
win.close();
self.close();
}

</script>

</head>
<body onload= start();>

Wächter

<a href=""
onClick="{stop(); return false;}">Beenden</a>

</body>

</html>
6. AutoStartBT.htm (Diese Datei im Browser laden oder StartBT.htm)
Startet bei Aufruf automatisch den Besuchertausch.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Besuchertausch automatsich starten</title>

<script type="text/javascript">

function StartBT() {
window.open("Kontroll_Popup.htm", "Framebrecher Meldung", "width=10, height=10");
}

</script>

</head>

<body onload="StartBT()";>

</body>

</html>
Infos:
JavaScript muss aktiviert sein.
Das Kontroll_Popup muss geöffnet bleiben. Wird es beendet läuft der Besuchertausch zwar weiter, aber die Überwachung wird beendet.

Das Script enthält einen einfachen Wiederaufruf des BT nach Erkennung eines Framebrechers oder Countdownstoppers, könnte aber natürlich nach Erkennung eines Framebrechers, oder Countdown Stoppers auch eine Meldeseite aufrufen. Diese Meldeseite müste dann nach Annahme der Meldung selber zum BT zurückleiten.

Countdownstopper werden erkannt, indem überprüft wird ob sich die angezeigte Kampange geändert hat. Ändert sich die angezeigte Kampange für X Sekunden (hier 200 Sekunden) lang nicht, so wird das als Countdown Stopp gewertet. (Diese Funktion habe nicht getestet).

Wenn das Besuchertausch Popup geschlossen wird, so startet das Kontroll_Popup nach ca. 5 Sekunden den Besuchertausch in einem neuen Popup.

2. Version ohne Popup
Scheint nur mit FF 1.5 zu funktionieren.

1. Frameset.htm (Diese Datei im Browser laden)
Das Frameset.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>

<head>
<title>Frameset Test</title>

<script type="text/javascript">

function FBMeldung() {
top.location="melden.htm";
}

</script>

<frameset rows="30,*"; onunload="FBMeldung()">
<frame src="abuse.htm" name="ab">
<frame src="ad.htm" name="werbung">
</frameset>

</head>

<body>

</body>

</html>
2. Ad.htm
Der Framebrecher


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Framebrecher</title>
<script type="text/javascript">
if (top != self) {
top.location = self.location;
}
</script>
</head>
<body bgcolor="#000000" text="#FFFFFF">

<h1>Framebrecher</h1>

</body>

</html>
3. Abuse.htm
Der Vergütungsframe. Hier eine html Datei ohne funktion.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Vergütungsframe</title>

</head>
<body>

</body>

</html>
4. Melden.htm
Die Seite wird bei Framebrecher Erkennung aufgerufen und schickt den Browser nach 5 Sekunden zurück zum Frameset.
Da das Frameset auch nach einem vom User ausgelösten Reload diese Meldeseite aufruft, könnte an hier vielleicht auch einen Button oder Link einbauen, der die Meldung bei Klick rückgängig macht.
So würde die Kampange nicht zwangsläufig gemeldet werden nur weil ein User mal ausversehen die Seite reloadet.



<html><head><title>Test</title>

<script type="text/javascript">

function Go() {
self.location="Frameset.htm";
}

setTimeout("Go()", 5000);

</script>

</head>

<body bgcolor="#BACBDE">
Meldung. Weiter in 5 Sekunden
</body>

</html>
Diese Art der Framebrecher Erkennung werden einige vielleicht aus einigen Besuchertauschern kennen. Eben weil ich sowas schon mal gesehn hatte wusste ich, dass es irgendie geht oder zumindest mal ging.
Leider scheint sie (zumindest auf meinem System) nur im FF 1.5 zu funktionieren.

3. Version mit Restart Popup.

1. Frameset.htm (Diese Datei im Browser laden)
Das Frameset. Hier ist auch die Erkennung eingebaut.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>

<head>
<title>Frameset Test</title>

<script type="text/javascript">
var win;

function FBMeldung() {
win = window.open("Popup.htm", "Besuchertausch", "width=800,height=600, status=1");
}

</script>

<frameset rows="30,*"; onunload="FBMeldung()";>
<frame src="abuse.htm" name="ab">
<frame src="http://www.gmx.de" name="werbung">
</frameset>

</head>

<body>

</body>

</html>


2. Abuse.htm
Der Vergütungsframe. Hier ein Dokument ohne Funktion



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Vergütungsframe</title>

</head>
<body>

</body>

</html>


3. Ad.htm
Der Framebrecher



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Framebrecher</title>
<script type="text/javascript">
if (top != self) {
top.location = self.location;
}
</script>
</head>
<body bgcolor="#000000" text="#FFFFFF">

<h1>Framebrecher</h1>

</body>
</html>


4. Melden.htm
Die Meldeseite. Sie wird bei einem Framebrecherfund im selben Fentser aufgerufen, in dem der Besuchertausch läuft und schickt das Gebrochene Fenster nach 5 Sekunden in den BT zurück. Die Seite kann aber auch im Popup geladen werden.



<html><head><title>Test</title>

<script type="text/javascript">

function Go() {
top.location.href="Frameset.htm";
//Wenn Die Seite im Popup geladen wird dann
//top.location.href=... ändern in
//opener.location.href=...
}

setTimeout("Go()", 5000);

</script>
</head>

<body bgcolor="#BACBDE">
Meldung. Weiter in 5 Sekunden

</body>
</html>


5. Popup.htm
Das Popup. Es entscheidet bei einer Framebrecher ähnliche aktivität, ob es wirklich ein Framebrecher war, oder ob der User den Besuchertauscher geschlossen hat.
Erkennt es einen Framebrecher, so schliesst es sich und lädt im gebrochenen Fenster die Meldeseite.



<html><head><title>Popup</title>

<script type="text/javascript">

function Close() {
//Schliesst das Popup
var x;
x=opener;
if (x) {
//Framebrecher muss gemeldest werden
opener.location.href="Melden.htm";
self.close();
}
else {
//User hat den Besuchertausch geschlossen
self.close();
}
}

</script>
</head>

<body bgcolor="#BACBDE" onload="Close()";>

</body>
</html>


Das Frameset öffnet bei einem Framebrecherfund, bzw wenn es verlassen wird das Popup. Das Popup prüft ob es wirklich ein Framebrecher war oder ob der User den Besuchertausch nur geschlossen hat. Es beendet sich aber dann sofort nach dem laden.
Erkennt es einen Framebrecher, so lädt es im Fenster welches gebrochen wurde die Meldeseite, welche nach 5 Sekunden in den Besuchertausch zurückleitet.

bulli
10.03.2008, 21:52
So, ich habe den Code auch mal ausprobiert, soweit funktioniert alles sehr gut, nur das jeden Sekunde der Frame "werbung" neu geladen wird.

Wenn ich diese
Counter=setInterval("Wachen()", 1000);
wegcount=setInterval("Restart()", 1000); Werte hochschraub, auf dann gehst, nur dann ist läuft auch die Framebrechererkennung nur immer seltener durch undwenn der Frame gebrochern wird, wird erst später wieder zurück in den Auto-Surf gelitten.

Worka
10.03.2008, 22:12
Also das könnte hier dran liegen.



...
if (win.location != Y) {
win = window.open(FramesetURL, "Besuchertausch", "width=800,height=600, status=1");
...
Tausch mal Y gegen die URL des Frameset aus.

Und erstze vielleicht mal



...
//Restart bei Popup close
function Restart() {
Restartcount++;
if (Restartcount > 5) {
win = window.open(FramesetURL, "Besuchertausch", "width=800,height=600, status=1");
}
}
...
Gegen



...
//Restart bei Popup close
function Restart() {
Restartcount++;
if (Restartcount > 5) {
Restartcount = 0;
win = window.open(FramesetURL, "Besuchertausch", "width=800,height=600, status=1");
}
}
...
oder



...
//Restart bei Popup close
function Restart() {
if (win) {
}
else {
win = window.open(FramesetURL, "Besuchertausch", "width=800,height=600, status=1");
}
}
...
Der erste Code soll das Popup zu Frameset zurückholen, wenn die location des Popup ungleich der Adresse des Frameset ist.

Der zweite Code Zählt eine Variable hoch, das Popup setzt sie wieder auf 0.

Verschwindet das Popup, so wird die Variable immer höher gezählt und erreicht nach 5 Sekunden den Wert 5.

Dann erkennt das Script, dass das Popup geschlossen wurde.

Die Änderung (letzter code) sollte aber besser sein, falls sie funktioniert. (habe ich nicht getestet)

bulli
11.03.2008, 18:17
OK, danke, der neue Code funzt einwandfrei, danke.:thumbsup::thumbsup::thumbsup:

schulz3000
11.03.2008, 23:26
Ich glaub ich hab den ultimativen JS-Code gefunden gegen Framebrecher.
Ist zwar abgekupfert aber irgendwie genial.

einfach nur ein kleines JS in die Seite einbauen wo das Frameset aufgebaut wird.

Hier ein kleines Beispiel mit den Dateien von Worka:


<html>

<head>
<title>Frameset Test</title>

<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript">

<!--

window.onbeforeunload = unloadMess;

function unloadMess(){

var mess ="Ist das ein Framebrecher?\nWenn du die Seite verlassen willst klicke OK.\nWenn du weitersurfen willst klicke auf Abbrechen ";

return mess;

}

//-->
</SCRIPT>

<frameset rows="30,*">
<frame src="abuse.html" name="ab">
<frame src="ad.html" name="werbung">
</frameset>

</head>

<body>

</body>

</html>

Worka
12.03.2008, 00:25
Ja das geht, aber es geht ja darum ohne Useraktivität den Framebrecher zu erkennen und weitersurfen zu können.

Pitti
12.03.2008, 01:13
hmm, aber im vms-besuchertausch wird das ganze fenster/seite doch neu geladen, also wie soll das das scipt erkennen, das es sich nicht um einen framebrecher handelt?

Worka
12.03.2008, 01:43
Einfach ein Frameset basteln, dass den BT anzeigt und den Link auf der webseite zum BT (den Link den der User klickt) gegen einen Link zum Frameset austauschen.

Bulli hat es auf Seiner Seite eingebaut, kannst Ihn ja mal ragen wie er das gemacht hat.
In seinem Script wird die Seite auch vollständig neu geladen.

bulli
26.06.2008, 13:51
So, es gibt mal wieder Neuigkeiten, welche mir nicht gefallen.

Im Opera 9.5 (neueste Version) funktioniert der Framebrecherschutz mit PopUpleider nichtmehr. Framebrecher können den Auto-Surf unterbrechen und es wird nichtmehr zurück in den Auto-Surf zurück geleitet. Jedoch wenn man dann das Fenster schleißt mit dem Framebrecher öfnnet sich ein neues Fenster mit Auto-Surf.

Im Firefox 3 funktioniert es eider überhaupt nichtmehr.

Ich hasse die neuen Browser :knueppel:, bei denen nichts mehr so funktionbiert, wie es sollte. :yawn:

Worka
26.06.2008, 16:58
Schade, dass die neuen Browser da nicht mehr mitspielen.
Ich werde es im FF3 mal mit der Version ohne Popup testen.

Am Ende hilft wohl leider nur eine Viewer Software wirklich gegen Framebrecher.

Aber bezüglich Framebrecher haben Sebmaster und ich noch was in Arbeit...

bulli
26.06.2008, 17:27
Ja, ein Viewer Software wird die letzte Möglichkeit bleiben, bei der Browservielfalt kann man keinen Schutz für alle Browser erstellen.

Darf man schon erfahren in welche Richtung eure Arbeit geht, also in Richtung Viewersoftware oder Surfbar?

Worka
26.06.2008, 18:23
...
Darf man schon erfahren in welche Richtung eure Arbeit geht, also in Richtung Viewersoftware oder Surfbar?

Weder noch, wir packen die Sache mal auf anderer Ebene an. :smile:

Kannst ja mal in die Surferer Shoutbox kucken, da steht noch was von mir.

Falls Du uns da weiterhelfen könntest (also wo bekommt man eine Proggerlizenz fürs Surferer), würden wir uns übrigens sehr freuen.

Per PN kannst Du gern mehr erfragen aber momentan wollen wir noch nicht so viel öffentlich verraten.