# Erkennen ob Webseite vom eigenen Host geladen wurde bwz obs von einen Iframe geladen



## splasch (1. Oktober 2007)

Hi
Welche möglichkeiten gibt es zu erkennen ob die eigenen Webseite nicht von einer Fremden Webseite in ein Iframe geladen wird oder Frame.

Ich möchte da in Php einen kleine schutz funktion schreiben die verhindern soll das die Eigene Seite in fremde Webseiten reingeladen werden kann.

Frame könnte man mit Javascript erkennen.Weiß net ob das bei Iframe auch geht.
Aber über Php könnte man doch auch prüfen ob die seite vom eigenen Webspace geladen wurde oder einer Fremden seite (Oder irre ich mich da)

Also was kann man mit hilfe php da alles machen damit das verhindert wird.

Wie würdet ihr bei erkennung vorgehen das laden der Seite abrechen oder zu versuchen die Seite neu zu laden in einem eigenen Fenster.

Mfg Splasch


----------



## MiNiMaG (1. Oktober 2007)

Schau dir das mal an:

```
<?
$referer ="$HTTP_REFERER ";
echo "Sie kommen von der Seite: $referer";
?>
```

Dann checkst du ob das dein Referer ist und wenn nicht, dann setzt du ein reload mit 0 sekunden und target= parent und schon gehört die volle seite dir


----------



## Flex (1. Oktober 2007)

Und Leute die das Übertragen des Referer ausgestellt haben, werden völlig ausgeschlossen?

Übrigens sollte man lieber

```
$_SERVER['HTTP_REFERER']
```
nutzen, aufgrund von register_globals.


----------



## splasch (1. Oktober 2007)

Hmm 

Habs nun mal zur not mit $_SERVER['HTTP_REFERER']  
gelöst aber wie schon oben erwähnt funktioniert das nicht immer.

Kennt jemand eine sicher Methode das ganze zu lösen.

Momentan sieht die Not Lösung so aus.


```
$url=$_SERVER['HTTP_REFERER']; // Url vom Header des aufrufers
$url=str_replace ( 'http://www.',"",$url);
$url=str_replace ( 'http://',"",$url);
$url=str_replace ( 'www.',"",$url);
$url=substr($url, 0, 20);  // ersten 20 zeichen
if ($url!=""){ // Fals 'HTTP_REFERER nichts ermitteln kann dann kein schutz
if ($url!="Eigener_Domainname.com"){
	
	die("
	<script language=\"JavaScript\"> 
       top.location.href=\"http://Eigener_Domainname.com\"; 
 	</script> "
	);exit();
}
}
```

Mfg Splasch


----------



## Sven Mintel (2. Oktober 2007)

Den HTTP_REFERER kannst du da nicht anwenden 

Der prüft, woher der Besucher zu dir kam.... aber das tut er auch, wenn die Seite ganz normal aufgerufen wurde, ohne in ein Frame geladen zu werden...es wären also keine Links von ausserhalb möglich(ich glaube nicht, dass du das willst.)



> Wie würdet ihr bei erkennung vorgehen das laden der Seite abrechen oder zu versuchen die Seite neu zu laden in einem eigenen Fenster.



Ich würde die Seite in dem selben Fenster neu Laden....falls du bei dir selbst keine Frames verwendest, einfach überall 
	
	
	



```
<script type="text/javascript">
<!--
if(self!=top)top.location=self.location;
//-->
</script>
```
...hinein und fertig.


----------



## splasch (2. Oktober 2007)

> Der prüft, woher der Besucher zu dir kam.... aber das tut er auch, wenn die Seite ganz normal aufgerufen wurde, ohne in ein Frame geladen zu werden


Das ist so nicht ganz richtig HTTP_REFERER gibt wieder die Adress auf die verwiesen wurde. Das bedeutet wenn die Seite von eine Fremden seite geladen wurde dann gibt er diese wieder ansonsten gibt er die eigene Domain wieder.

Das heißt sobald jemand versucht die Seite über einen anderen Host zu laden dann gibt HTTP_REFERER den Host an über den versucht wurde die Seite zu laden.
Und keines weg den Besucher also der surft  kann irgendwo sein trozdem wird HTTP_REFERER nur die Domian der eigenen seite zurück liefern.


> ...es wären also keine Links von ausserhalb möglich(ich glaube nicht, dass du das willst.)


Das ist auch nicht ganz richtig links sind insofern möglich wenn sie nur auf die Domain verweisen.Aber sobald man versucht teile wie Bilder nur zu Laden dann greift der schutz ein und es wird statt dem Teil (bsp nur dem Bild) die ganze Webseite geladen. Das bedeuted einbinden ist nicht möglich von einzelene Elemente der Hp.Sobald man das veruschen würde er einfach die Ganze Hp im Selben Fenster neu Laden und den alten Inhalt im dem fall komplett überschreiben und das ist ja so gewünscht da man ja nicht will das der eindrück ensteht das man auf der eigenen Hp nun fremdwerbungen oder fremde links stehen hat.



> Ich würde die Seite in dem selben Fenster neu Laden....falls du bei dir selbst keine Frames verwendest, einfach überall



Das ist ein gute und schöne lösung die auch gewünscht ist. Aber was machst du wenn der Client Javascript deaktiviert hat. Dann landet er im unerwünschten Iframe mit der fremd werbung die dann im ende die eigene Webseite schlecht macht.
Stell dir nur vor was passieren würde wenn die dort illegale inhalte  einfach ausenherum dazu schreiben.Da könnte man das leicht verwechseln und die klage welle könnte dann den Ahnungslosen betreiber treffen.

Übrings hab ich mitterweilen herausgefunden das die Seite der das macht in Frankreich sitzt und auch wen diese gehört alllerdings die von der Haupt domian.Da das ganze von der Subdomain läuft kann es sein das jemand anderes dafür verantwortlich ist.

Wer sich anschauen will wie sowas aussieht was der da dort macht findet es unter
http://economy.jdmag.net/dir/Indust...erheitsausrustung/index-4-27633-0-3-0-0-.html
Dort werden jede menge fremde Webseiten einfach in ein Div Iframe geladen und oben und unterhalb Werbung eingeblendet.Vorallem welche die überhaupt nicht geduldet werden.

Mfg Splasch


----------



## Sven Mintel (2. Oktober 2007)

Tut mir Leid, aber das, was ich deinem nur schwer verständlichen Post entnehme, ist schlicht falsch.

HTTP_REFERER liefert, sofern vom Browser bereitgestellt, die Adresse, von welcher die aktuelle Adresse aufgerufen wurde.
Es spielt dort weder der HOST eine Rolle, noch die Tatsache, ob etwas in einem Frame oder sonstwie geladen wurde.

Wenn du es nicht glaubst.... http://doktormolle.de/ref.php
Keine Frames da, und trotzdem ist der REFERER gesetzt(sofern der Browser das will)


Zu deinem Einwand betreffs Javascript: ohne ist diese Sache nun mal nicht machbar, denn Javascript ist die einzige Möglichkeit, überhaupt zu ermitteln, ob etwas in einem Frame geladen wurde, denn der Server kennt keine Frames.


BTW: deine Variante verwendet auch JS :suspekt:


----------



## Gumbo (2. Oktober 2007)

Zu prüfen, ob eine Webseite in einem Frame geöffnet wurde, ist nur mit clientseitigen Mitteln möglich. Denn erst im Browser werden die unterschiedlichen Dokumente (Frame-Dokument und Dokument im Frame) zusammengesetzt dargestellt.
Im HTTP – auf das die HTTP-Referrer-Variante basiert – ist diese Beziehung der zwei Dokumente gar nicht ersichtlich.


----------



## splasch (2. Oktober 2007)

> BTW: deine Variante verwendet auch JS



Ja aber man muß den php code mal genau betrachten was da gemacht wird.Wenn java ausgeschaltet ist dann wird die Seite auch nicht geladen.Soweit funktioniert diese Variante auch.
Was HTTP_REFERER macht ist mir auch klar.

Bei meiner Variante wird auch net geprüft ob Frame geladen wurden oder nicht.Sondern wenn man sich mal genauer den Code ansieht. Dann macht der nix anderes als den Domain namen zu prüfen. Wenn dieser nicht stimmt dann trifft erst der javascript link in kraft. Kann dieser nicht ausgeführt werden weil es ausgeschalten ist dann wird weiter die Seite erst garnicht geladen da ein Abruch mittels php folgt.
Möglicher weiße ist auch ein erneuter aufruf über php möglich dann kann man das javascript oben ganz weg lassen.

Wichtig ist nur das das Ziel erreicht wird wie nun dies Prüfung folgt ist neben sache.Wie gesagt das ist nur mal eine Not Lösung es gibt sicher bessere Möglichkeiten das zu Prüfen.

Ihr dürft euch dabei nicht zusehr auf eine sache versteifen! 
Man muß eben auch andere Möglichkeiten in betracht ziehen wie man zu dem Ziel kommt.

Ich glaube sicherer were das ganze wenn man einfach immer die Aktuelle komplette url ausliest dann sollte das immer funktionieren.Und dann einfach prüft ob der Domain name vorne stimmt wenn was anderes davor steht kann man davon ausgehen das es von einer Fremden Seite geladen wurde.

Welche Server Variablen würdet ihr benutzen um die Aktuelle Url auszulessen und zwar in dem Format wie es im Browser url eingabe steht (Bsp. http.//Webname.de)
Und welche php funktion würde ihr verwenden um die Seite umzuleiten auf die Eigene Domain.

Mfg Splasch


----------



## Sven Mintel (2. Oktober 2007)

splasch hat gesagt.:


> dann wird weiter die Seite erst garnicht geladen da ein Abruch mittels php folgt.


Eben...und das würde auch passieren, wenn ich einfach von einer fremden Seite aus verlinke, bspw. von hier oder einer Suchmaschine.

Wie willst du Besucher auf eine Seite locken....Reklame versenden per Post, weitererzählen beim Friseur....?


----------



## splasch (2. Oktober 2007)

> Eben...und das würde auch passieren, wenn ich einfach von einer fremden Seite aus verlinke, bspw. von hier oder einer Suchmaschine.



Nein das bassiert eben nicht könnt ihr gerne testen.Der code ist breist in der Hp ein gebaut.
Ich setzt euch mal einen link von der Hp rein damit ihr seht das es geht.
http://www.hs-arbeitsschutz.com/

So nun noch der Link wo der schutz greift seht euch zuerst aus der liste eine anderen an dann meine
http://economy.jdmag.net/dir/Indust...erheitsausrustung/index-4-27633-0-3-0-0-.html

Dort klick ihr mal auf Sabco AB dann seht ihr das die im den Iframe geladen wird.
Dan geht noch mal zurück auf den oben geposten link und klickt auf Sandra Hradtezky - Arbeitsschutz und Gefahrenstofflagerung  dann werdet ihr sehen das der Schutz so funktioniert.

Wenn ihr das jetzt noch immer nicht Glaubt dann schaltet mal javascript aus dann werdet ihr sehen das das Laden der Seite unter dem Iframe abgebrochen wird.

Mfg Splasch


----------



## Gumbo (2. Oktober 2007)

Wenn aber jemand JavaScript deaktiviert hat, landet er auf einer für ihn leeren Seite.


----------



## splasch (2. Oktober 2007)

> Wenn aber jemand JavaScript deaktiviert hat, landet er auf einer für ihn leeren Seite.



Ja aber nur wenn von einer Fremden domain versucht wird meine Seite einzubinden. Ist javascript ausgeschalten und man hat einen Suchmaschienen link oder Forum link wie hier dann kommt man genauso auf die Seite.

Daher war ja auch vorhin die Frage obs eine umleitung möglichkeit mittel php gibt.Wurde wohl komplett hier überlesen.

2 Frage war wie man am besten die komplette Url auslesen kann dann würde nähmlich der Schutz immer greiffen.

Ich geb euch hier mal ein Beispiel wie der Schutz funktioniert damit ihr es besser verstehen könnt.

Orginal Domain lautet: Testseite.de
Fremde Domain die versucht die Seite zu landen lautet: Anderename.de/fremdseite.php

So nun vergleicht die Schutz funktion die Domain namen stimmt die nicht mit der zuvor fix definieren domain überein beginnt er die Seite neu zu laden sollte das nicht gehen weil javascript aus ist dann bricht er über die exit funktion den Ladevorgang der Seite ab.

Hier noch mal der Komplette Aktuelle schutz code

```
$url=$_SERVER['HTTP_REFERER']; // Url vom Header des aufrufers
$url=str_replace ( 'http://www.',"",$url);
$url=str_replace ( 'http://',"",$url);
$url=str_replace ( 'www.',"",$url);
//echo "ohne".$url."<br>";
$url=substr($url, 0, 20);  // ersten 20 zeichen
//echo $url."<br>";
if ($url!=""){
if ($url!="hs-arbeitsschutz.com"){
	
	die("
	<script language=\"JavaScript\"> 
       top.location.href=\"http://www.hs-arbeitsschutz.com\"; 
 	</script> "
	);exit();
}
}
```
Und im Hmtl bereich als zusatz absicherung noch die Frame prüfung

```
<script type="text/javascript">
<!--
if(self!=top)top.location=self.location;
-->
</script>
```

Mfg Splasch


----------



## Gumbo (2. Oktober 2007)

splasch hat gesagt.:


> Ja aber nur wenn von einer Fremden domain versucht wird meine Seite einzubinden. Ist javascript ausgeschalten und man hat einen Suchmaschienen link oder Forum link wie hier dann kommt man genauso auf die Seite.


Hast du das denn überhaupt schon ausprobiert? Das HTTP-Referrer-Feld wird eben nicht nur gesetzt, wenn ein Dokument in ein anderes mittels Frame eingebunden wird, sondern auch, wenn man einer automatischen Weiterleitung oder einem normalen Link folgt (vorausgesetzt der Browser sendet überhaupt diese Information). Und genau letzteres kommt aufgrund der Natur des Hypertextes ziemlich häufig vor.



splasch hat gesagt.:


> Daher war ja auch vorhin die Frage obs eine umleitung möglichkeit mittel php gibt.Wurde wohl komplett hier überlesen.


Es gibt die Möglichkeit eine HTTP-Weiterleitung zu senden. Dies wird dir aber nicht helfen, da das HTTP eben keine Frames kennt sondern diese nur in der Browserdarstellung existieren.


----------



## splasch (2. Oktober 2007)

> Hast du das denn überhaupt schon ausprobiert? Das HTTP-Referrer-Feld wird eben nicht nur gesetzt, wenn ein Dokument in ein anderes mittels Frame eingebunden wird, sondern auch, wenn man einer automatischen Weiterleitung oder einem normalen Link folgt (vorausgesetzt der Browser sendet überhaupt diese Information). Und genau letzteres kommt aufgrund der Natur des Hypertextes ziemlich häufig vor.



Klar hab ich alles ausgetest einmal mit eingeschalten javascript und einmal mit ausgeschalten javascript.Du hast da schon recht das man einen andere url bekommt wens über einen link aufgerufen wurde nur ist das nicht schlim weil im dem falls wo der schutz eingreift nix anderes macht als die Seite neu zu laden und daher im schlimsten fall die Seite 2 mal geladen wird (Wohl da sicherlich unötig ist). Ist ja auch nur die erste Not lösung mußte eben schnell gehen.

Der nächste schritt wird sein die Url nicht über 'HTTP_REFERER' auszulesen sondern über die Server variablen die Aktuelle url auszulesen dann ist es nähmlich egal von woher der link stammt.


> Es gibt die Möglichkeit eine HTTP-Weiterleitung zu senden. Dies wird dir aber nicht helfen, da das HTTP eben keine Frames kennt sondern diese nur in der Browserdarstellung existieren


Daran hab ich auch schon gedacht es ist net schlim wenn die Frames nicht erkannt werden.Dafür ist ja dann die Schutz funktion zuständig auch wenn diese zwar keine Frames erkennt aber zumindesten erkennt das da was nicht stimmt und daraufhin dann die Seite neu Ladet.Oder eben im Notfall abricht wenn das alles nix nützt.

Mfg Splasch

Ps Nachtrag :
Versteh mich nicht falsch aber es ist momentan besser wenn die Seite nicht angezeigt wird.Als man bekommt eine klage wegen eben solchen Fremden Webseiten die dann villeicht sogar noch ilegale inhalte einfügen.

Für die Dauer werd ich was ohne Javascript schreiben müßen entuell dann die http weiter leitung.


----------



## Gumbo (2. Oktober 2007)

Ich glaube du verstehst noch nicht ganz wie Frames funktionieren. Ein in einem Frame geladenes Dokument ist ein autarkes Dokument wie als würde es in einem separaten Fenster oder Tab geöffnet. Nur auf der Clientseite wird es innerhalb eines anderen Dokuments dargestellt und findet sich auch im DOM wieder.

Das HTTP macht jedoch keinen Unterschied, ob der Browser, an den das Dokument geschickt wird, es in einem Fenster, einem Tab oder eben einem Frame öffnet. Deswegen wirst du auch mit HTTP-Mitteln dieses Problem nicht lösen können. Denn auch durch das Neuladen des Dokuments, was zwar eine Änderung des HTTP-Referrers bewirkt, würde das Dokument eben nur im selben Fenster, Tab oder eben Frame neu geladen.

Die einzige verlässliche Möglichkeit ist das DOM im Browser zu prüfen, ob das aktuelle Dokument gleichzeitig das oberste ist, was bedeutet, dass es direkt aufgerufen wurde.


----------



## splasch (2. Oktober 2007)

Ja ist nur die Frage wie man das dann im Code schreibt.
Du hast recht bei http umleitung wird nicht auf top verwiesen wie beim javascript umleitung daran habe ich im moment nicht gedacht.

Mir ist da noch was eingefallen man könnte ja im Falle wenn javascript ausgeschalten ist einfach nur einen link posten mit target="_top" .
Oder kann man das auch automatisch machen über http refresh

Mfg Splasch


----------



## Gumbo (2. Oktober 2007)

splasch hat gesagt.:


> Versteh mich nicht falsch aber es ist momentan besser wenn die Seite nicht angezeigt wird.Als man bekommt eine klage wegen eben solchen Fremden Webseiten die dann villeicht sogar noch ilegale inhalte einfügen.


Wie sollte solch eine Anklage lauten? Etwa „geduldetes Einbinden eigener Webseiten in Webseiten anderer mit rechtswidrigen Inhalten“? Das ist doch absurd.

Das Umgekehrte ist eher der Fall: du könntest die Betreiber der Websites, die deine Seiten durch Frames einbinden, erst einmal dazu auffordern, dies zu unterlassen, und dann sogar verklagen. Denn dabei handelt es sich vermutlich um ein unerlaubtes öffentliches Zugänglichmachen (siehe auch Framing und Urheberrecht - Das Setzen von Frames mit fremden Inhalten kann eine Urheberrechtsverletzung darstellen), das laut Urheberrecht erst einmal dir allein als Urheber zusteht.


----------



## splasch (2. Oktober 2007)

> Wie sollte solch eine Anklage lauten? Etwa „geduldetes Einbinden eigener Webseiten in Webseiten anderer mit rechtswidrigen Inhalten“? Das ist doch absurd.


Weil es eben dadurch schnell zu Verwechslung kommen kann als erstes schauen die doch alle auf Impressum und nicht wehm die Domain gehört.Klar kann man dann belegen das man nicht schuld daran ist aber die Rechstverdreher finden da immer was und man könnte mir eine Teil schuld anhängen.

So hab mal eine abänderung gemacht damit wenn javascript aus ist zumindesten ein link erscheint der die Seite dann Ladet 

```
die("
	<script language=\"JavaScript\"> 
       top.location.href=\"http://www.hs-arbeitsschutz.com\"; 
 	</script>
	<a href=\"http://www.hs-arbeitsschutz.com\" target=\"_top\">Weiter zu www.hs-arbeitsschutz.com</a>
 	"
	);exit();
```
So ist dann möglich das er zumindesten einen link hat den man anklicken kann wenn Javascript ausgeschaltet ist oder kann man das irgendwie auch automatiseren.

Mfg Splasch


----------



## Gumbo (2. Oktober 2007)

splasch hat gesagt.:


> Klar kann man dann belegen das man nicht schuld daran ist aber die Rechstverdreher finden da immer was und man könnte mir eine Teil schuld anhängen.


Das ist doch Quatsch. Dann würden doch auch Zeitungsverleger verklagt, wenn Erpresser Wörter oder Buchstaben ihrer Zeitung zum Schreiben eines Erpresserbriefes verwenden.

Mein Vorschlag: Schreibe irgendwo auf deiner Website, dass du es nicht duldest, dass deine Webseiten durch Frames in andere eingebunden werden. Gleichzeitig kannst du dann bei Verstößen mit folgenden JavaScript-Code den Frame zerstören und den Verstoß protokollieren, um anschließend den Betreiber darauf hinzuweisen.
	
	
	



```
if( self != top ) {
<?php

	if( isset($_SERVER['HTTP_REFERER']) && ($referer = parse_url($_SERVER['HTTP_REFERER'])) && isset($referer['host']) && $referer['host'] != $_SERVER['SERVER_NAME'] ) {
		echo '(new Image()).src = "http://example/frameDetective.php?url='.urlencode($_SERVER['HTTP_REFERER']).'";';
	}

?>
	//alert("Diese Webseite darf nicht in einem Frame angezeigt werden!");
	top.location.href = self.location.href;
}
```


----------



## splasch (2. Oktober 2007)

Gute Idee wie du das vergleichst und auch das mit dem Protukolieren so kann man zumindesten die Webseiten ausfindig machen die dagen verstoßen.

Werd sicher einen teil davon umsetzen und einbinden.

Ich hab mal durch netzt gesurft und unter anderen eine Werbeseite gefunden die eine Test funktion hat dabei wird jede Fremde seite einfach ein Werbung über die Test funktion eingeblendet.

http://faq.sponsorads.de/questions/37/Infos+und+Beispiele+zum+Werbemittel:+Frame+Layer

gebt dort mal unter Testen eine webseite ein dann wird diese aufgerufen und mit Werbung überlendet. Kann man solche Manipulationen auch irgendwie unterdrücken.
So wie das dort aussieht schreiben die einfach einen javascript code mit rein in den Html text.(Vermutlich lesen die zuerst die Html daten aus) 

Mfg Splasch


----------



## TheBodo (2. Oktober 2007)

also du kannst per javascript die frametiefe testen
ob das bei iframe geht... keine ahnung, aber:

http://de.selfhtml.org/javascript/objekte/frames.htm

Meiner Meinnung nach müsstet du dass dann wie folgt testen können:


```
if (parent.location != "index.htm")  {
document.location.href="www.abc.de";
}
```

Grüße Bodo


----------

