Seite 1 von 2

Anti-Hijacking Code

Verfasst: 01.10.2006, 12:19
von AnjaK
Da ich nun schon öfter gefragt wurde möchte ich hier mal den Code reinschreiben, den ich verwenden um mich von einem 302er Hijacking zu befreien. Das Ganze geht sicher auch mit der .htaccess, aber da bin ich nicht so die Heldin bei...
Ist ne neue Version, die alte die ich sonst verwendet haben hatte eine Umleitung mehr. Aber das sollte auch gehn!
Startseite-Snippel:

<?
#Erste Zeile der Seite
if(!$_POST['XYZ']) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: umleitung.php?XYZ=1");
}
?>

#Snippel Seite Umleitung
<script language="JavaScript">
with (document.form1) {
action="startseite.php";
XYZ=1;
submit();
}
</script>
Sollten Fehler drin sein, einfach korrigieren ;)

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 01.10.2006, 12:27
von Airport1
Ist ein grosser Denkfehler drin. Der HTTP 302 passiert auf dem ausloesenden "QuellServer", jedoch Du auf dem betroffenen "ZielServer" bekommst davon gar nichts mehr mit. Wenns so einfach waere waers schoen ;)

Was soll die Intention hinter dem Code Snippet sein?
Meinst ein HTTP 302 wird durch einen HTTP 301 auf dem ZielServer "aufgehoen" oder verliert seine Wirkung?

Eher passiert wohl folgendes:

QuellServer Q macht http 302 auf ZielServer Z SeiteA
Z macht einen 301 auf eine andere Seite SeiteB in Z
Die Suma merkt sich nun: aha, HTTP 302 von Q auf SeiteA in Z, ist eigentlich ein HTTP 302 von Q auf SeiteB in Z

Verfasst: 01.10.2006, 12:28
von AnjaK
Kein Denkfehler, dein Denkfehler ;)

Der Code prüft nicht ob da ein 302er ankommt. Die Umleitung geschieht IMMER.

<< Wenns so einfach waere waers schoen

Es ist so einfach ;)

Verfasst:
von

Verfasst: 01.10.2006, 12:32
von Airport1
Im besten Falle wird dadurch aber nur der HTTP 302 auf Seite B statt auf Seite A gespeichert. Vielleicht soll das das Ziel sein? Gewonnen ist dadurch m.E. jedoch nix.

Verfasst: 01.10.2006, 12:35
von oldInternetUser
Ich will ja die gute Laune nicht verderben.

Aber ich hatte mich neulich mal gewundert, warum google plötzlich von einem Verzeichnis mit etwa 60 Unterseiten nicht zunächst nur 30, sondern sofort alle anzeigt, das Verzeichnis also wichtiger gewichtet.

Heute früh stellte sich heraus: Ich habe einen hoch thematischen Link - der linkt per 302 und wird von google per link:meine-unterseite.htm gelistet.

Und der eigentliche Link - http:// www .example.com/link.php?id=987 - erscheint auch nicht in google. Yahoo listet diesen Link übrigens nicht.

Verfasst: 01.10.2006, 15:18
von Pretender
und wie hast Du den Link gefunden?

Verfasst: 01.10.2006, 16:35
von oldInternetUser
Pretender hat geschrieben:und wie hast Du den Link gefunden?
In meinem Protokoll, der bringt bald täglich Besucher.

Re: Anti-Hijacking Code

Verfasst: 01.10.2006, 16:42
von Kristian
Hallo

Ich stell mir mal vor ich bin ein Bot und kann kein JavaScript.
Für mich bleibt:
AnjaK hat geschrieben: Startseite-Snippel:
<?
#Erste Zeile der Seite
if(!$_POST['XYZ']) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: umleitung.php?XYZ=1");
}
?>
Geil!
Ich schicke einen GET-Request.
Da es kein POST ist bekomme ich den Redirect.
Ok, also GET-Request auf die neue Adresse.
Da es kein POST ist bekomme ich den Redirect.
Ok, also GET-Request auf die neue Adresse.
Da es kein POST ist bekomme ich den Redirect.
Ok, also GET-Request auf die neue Adresse.
Da es kein POST ist bekomme ich den Redirect.
Ok, also GET-Request auf die neue Adresse.
Da es kein POST ist bekomme ich den Redirect.
Ok, also GET-Request auf die neue Adresse.
Da es kein POST ist bekomme ich den Redirect.
Ok, also GET-Request auf die neue Adresse.

Irgendwann habe ich aber keine Lust mehr.
(Mein Bot verfolgt generell *keine* Redirects)

Gruss Kristian

Verfasst: 01.10.2006, 19:43
von AnjaK
*blabla*

Wenn du ein GET schickst, bist du dumm und hast keine Ahnung :D
Sorry, aber ist so.
<< (Mein Bot verfolgt generell *keine* Redirects)
Mein Bot kann sich die Eier lecken... na und?

Das Javascript erzeugt einen 302er. Somit hijackt sich die Startseite im Idealfalle selber und befreit sich vom ankommenden 302er. Ich habe es mit einer gehijackten Domain versucht und sie wurde frei. Die Wahrscheinlichkeit, dass es an dem Code lag, ist sehr hoch, wenn auch nicht 100%.

Wie gesagt, ich kann euch sagen, was ich erfolgreich verwenden und was nicht. Was ihr draus macht ist mir völlig schnuppe und jedem seine eigene Sache ;)

Verfasst: 01.10.2006, 23:55
von Kristian
Hallo
AnjaK hat geschrieben:*blabla*
Wenn du ein GET schickst, bist du dumm und hast keine Ahnung :D
Sorry, aber ist so.
Ich bin beeindruckt. Du willst uns also wirklich erzählen Bots würden dir zuliebe POST-Requests schicken? Schau dir deine PHP-Config mal an und überprüfe wie die Parameter in deinen Scripten verarbeitet werden. Dann wirst du wohl erkennen, warum dein Code nur für dich Sinn macht.

Gruss Kristian

Verfasst: 02.10.2006, 04:08
von t-rex
Nun, die Idee an für sich ist gar nicht soooo schlecht ;-) Keine Ahnung, ob das so beabsichtigt war .... aber wenn man sich mal so anschaut, wie so Crawler-, Browser-, Clientscripte arbeiten, dann sieht man, dass diese sich eigentlich immer den letzten Statuscode merken. Das wäre in desem Fall tatsächlich der 301. Ob jetzt Google auch so arbeitet???? Was wiess ich ;-)

Nur das Script hier, das ist noch nicht ganz schlüssig.

Grundsätzlich wird also ein 301 Redirect ausgeführt. Mit Ausnahme, es ist ein POST. Wenn ein Crawler diese Seite besucht, dann kommt er auf die Umleitung. PUNKT! Er sieht also nur die umleitung.php. Die startseite.php ist für den Crawler quasi nicht vorhanden. Und das ist das grosse Loch. Weil man will ja, dass er den Content von der startseite.php sieht !?!?!?!?

So und um die Javascriptumleitung evtl. unnötig zu machen, könnte man vielleicht den REFERER abfragen. Und wenn dieser einen Wert enthält, dann ist es schonmal nicht Google. Dass nicht jeder Browser einen Referer übergibt ist mir natürlich klar ;-) Aber zumindest für User mit REFERER könnte man sich die Umleitung sparen.

sonnige Grüsse
HaPe

Verfasst: 02.10.2006, 08:55
von AnjaK
Kristian hat geschrieben:Hallo
AnjaK hat geschrieben:*blabla*
Wenn du ein GET schickst, bist du dumm und hast keine Ahnung :D
Sorry, aber ist so.
Ich bin beeindruckt. Du willst uns also wirklich erzählen Bots würden dir zuliebe POST-Requests schicken? Schau dir deine PHP-Config mal an und überprüfe wie die Parameter in deinen Scripten verarbeitet werden. Dann wirst du wohl erkennen, warum dein Code nur für dich Sinn macht.

Gruss Kristian
Was laberst du da eigentlich für einen Mist? *kopfschüttel*

Wieso sollte ein bot per POST oder GET kommen das ist doch VÖLLIG unerheblich!. Das $_POST reagiert auf die Variable, die mittels HTML-Formular per POST an die Startseite gesendet wird und das ist IMMER POST (es sei denn ich gebe GET explizit an!)... <form... method="post">... wo ist dein seltsames Problem??
Wenn ein Bot per GET kommt, wird er umgeleitet und dann zurück zur Startseite, auch wenn er per POST kommt, oder per Dampfzug!

Das Script reagiert NICHT auf von außen kommende Impulse, sondern NUR auf von INNEN kommende.
Sprich: Es wird IMMER umgeleitet, scheißegal ob ein Bot per Post, per Nachnahme, per Neckermann oder per mail kommt. Das POST kommt vom Script umleitung.php von der Form.

Der Letzte Status ist ein 301 oder ein 302 jenachdem wie der Bot das Formularpost interpretiert (da bin ich noch nicht 100% sicher) und Google nimmt diesen als gegeben hin (so die für mich persönlich bestätige Theorie) was den 302er auslöscht.

Wenn jemand Javascript KOMPLETT ausgeschaltet hat, sieht er in der Regel 90% aller kommerziellen Seiten nicht, das ist mir also völlig wurscht, wenn der hängen bleibt. Zudem kann man auf der Umleitung.php durchaus einen Link anbringen, den man zur Not anklicken kann. An einem User, der JS komplett ausgeschaltet hat, bin ich nicht interessiert, denn er wird auch nichts bei mir kaufen können in der Regel...

<< Er sieht also nur die umleitung.php. Die startseite.php ist für den Crawler quasi nicht vorhanden.

Falsch, denn die Umleitung.php schickt ihr direttisimo zur Startseite zurück, wo er mit der Variable ankommt und stehnbleibt.

Referer ist nicht möglich, da der Referer oft unterdrückt wird und gefaket werden kann. Das wäre ja einfach ;)

<< zumindest für User mit REFERER könnte man sich die Umleitung sparen
Das wäre eine Zusatzvariante, die dem User das erspart, aber wofür? Der User merkt nichts von der Umleitung. Wenn jemand JS deaktiviert hat (was ich abfragen kann), dann kann ich ihm die Umleitung sparen, das ist korrekt und wäre sinnvoll, richtig.

Die Umleitung POSTET deswegen, weil ein URL-Redirect auf startseite.php?XYZ=1 DC auslösen würde, da dies dann zwei unterschiedliche URLs wären und man will ja die Startseite zurück und nicht einen Parameterschwanzseite.

ich weiß gar nicht, warum ich den Code so bissig verteidige vor manchen Hobbycodern, kann mir doch im Prinzip nur Recht sein, wenn ihr per Hijack hängen bleibt, weniger Konkurrenz :D ;)

Jetzt geh ich nen Tee trinken, will noch jemand einen, Örl Gräi, heiß ;)

Verfasst: 02.10.2006, 09:49
von Nullpointer
könnt ihr bitte diese fäkalsprache lassen, sonst könnte man am ende noch meinen, ihr seid tatsächlich hacker.

Verfasst: 02.10.2006, 10:23
von AnjaK
Als Alternative um den JS-Code zu umgehen kann man natürlich eine PHP-Seite dazwischen hängen.

Die umleitung.php leitet einfach ohne Parameter auf die Startseite per 301er PHP-Redir, welche dann den Referer überprüft und wenn der von "letzerseite.php" kommt, dann bleibt das Ganze stehn. Und da dieser Referer vom eigenen Server kommt wird er auch in jedem Falle übertragen.

Das würde natürlich auch gehn und wäre vielleicht sogar die bessere Variante.

Verfasst: 02.10.2006, 18:23
von t-rex
Hallo Anja
AnjaK hat geschrieben: Was laberst du da eigentlich ...
Auch ich möchte Dich bitten Deine Emotionen ein bisschen im Zaum zu halten. Danke :-)
AnjaK hat geschrieben: Wieso sollte ein bot per POST oder GET kommen das ist doch VÖLLIG unerheblich!. ...
Nun, so unerheblich ist das gar nicht. Weil Du ja genau die Methode in Deinem Skript abfragst. Und mir ist nicht bekannt, dass ein Crawler per POST abfrägt. Also ist die bevorzugte Methode eines Crawlers das GET. Und zusätzlich noch - meistens wohl zur Überprüfung von Images - die Methode HEAD.
AnjaK hat geschrieben: Der Letzte Status ist ein 301 oder ein 302 jenachdem wie der Bot das Formularpost interpretiert (da bin ich noch nicht 100% sicher) und Google nimmt diesen als gegeben hin (so die für mich persönlich bestätige Theorie) was den 302er auslöscht.
Wir sind uns doch alle einige, dass ein Bot kein JavaScript ausführt!? Oder hat sich da was in den letzten Tagen geändert ;-)
AnjaK hat geschrieben: Wenn jemand Javascript KOMPLETT ausgeschaltet hat, sieht er in der Regel 90% aller kommerziellen Seiten nicht, das ist mir also völlig wurscht, wenn der hängen bleibt.
Also bleibt auch der Bot bei dieser Seite hängen? Weil ein Bot ja sein JavaScript deaktiviert hat ;-)
AnjaK hat geschrieben: Zudem kann man auf der Umleitung.php durchaus einen Link anbringen, den man zur Not anklicken kann.
Okay, damit könnte auch der Bot was anfangen.
AnjaK hat geschrieben: An einem User, der JS komplett ausgeschaltet hat, bin ich nicht interessiert, denn er wird auch nichts bei mir kaufen können in der Regel...
Stimmt. Ein Bot wird dann eben auch nichts kaufen. ;-)
AnjaK hat geschrieben: << Er sieht also nur die umleitung.php. Die startseite.php ist für den Crawler quasi nicht vorhanden.

Falsch, denn die Umleitung.php schickt ihr direttisimo zur Startseite zurück, wo er mit der Variable ankommt und stehnbleibt.
Sorry, muss ich aber noch einmal widersprechen :-) Aus Deinem Eingangsposting geht hervor, dass auf der startseite.php per PHP weitergeleitet wird. Und in der umleitung.php ausschliesslich per JavaScript. Da ein Bot kein JavaScript ausführt bleibt er bei der umleitung.php hängen. Es sei denn wir interpretieren alle die Codezeilen falsch, oder in der umleitung.php ist etwas enthalten, was Du vergessen hast zu erwähnen.
AnjaK hat geschrieben: Referer ist nicht möglich, da der Referer oft unterdrückt wird und gefaket werden kann. Das wäre ja einfach ;)
Sagt wer? ;-) Sorry, aber dass der Referer oft unterdrückt wird und gefaket wird, ist eine Glaubensfrage. Es ist richtig, dass Mitbewerber sehr oft ihre Spuren damit verwischen. Ein Bot sendet in der Regel keinen Referer. Der Ottonormalverbraucher dagegen schon. So ist halt meine Erfahrung. Aber war ja nur ein Vorschlag :-)
AnjaK hat geschrieben: << zumindest für User mit REFERER könnte man sich die Umleitung sparen
Das wäre eine Zusatzvariante, die dem User das erspart, aber wofür? Der User merkt nichts von der Umleitung. Wenn jemand JS deaktiviert hat (was ich abfragen kann), dann kann ich ihm die Umleitung sparen, das ist korrekt und wäre sinnvoll, richtig.
Auch hier würde ich nicht vorbehaltlos zustimmen wollen. Dazu gibt es zuviele mögliche Fehlerquellen im Netz.
AnjaK hat geschrieben: ich weiß gar nicht, warum ich den Code so bissig verteidige vor manchen Hobbycodern, kann mir doch im Prinzip nur Recht sein, wenn ihr per Hijack hängen bleibt, weniger Konkurrenz :D ;)
Da Du auch mich in Deinem letzten Beitrag zitiert hast, fühle ich mich hier angesprochen. Und ich möchte Dich bitten, das zu unterlassen! Du kennst mich nicht, und weisst über mich und meine Profession nicht genug, um mich derart abwertend zu titulieren.

Nichts destotrotz finde ich den Ansatz des Scripts sehr interessant und würde eine weitere fachliche Diskussion sehr begrüssen. :-)

sonnige Grüsse
HaPe