Frage

Ich erstelle eine kleine Webseite mit PHP, die von ein paar Websites als iFrame zugegriffen wird. Ich will den Zugang zu dieser Website beschränken nur innerhalb der „zugelassenen“ Websites zu arbeiten, und nicht auf andere Websites oder direkt zugegriffen. Hat jemand irgendwelche Vorschläge? Ist das überhaupt möglich? Die PHP-Website wird Apache und die Websites, um den Inhalt iframing wahrscheinlich .NET sein.

Nur um zu klären, jede Website, die Seite anzeigen können, solange sie innerhalb einer zugelassenen Stelle iframe'd ist. Ich will die Leute daran hindern, direkt erreichbar. Ich denke Cookies könnte eine Lösung sein, aber ich bin mir nicht sicher.

War es hilfreich?

Lösung 7

Vielen Dank für all die tollen Ideen! Ich denke, die Lösung, die ich mit gehen werde ein Session-Cookie von der zugelassenen „iframing“ site gesetzt ist. Jemand wirklich noch in der Lage bestimmt sein, den Inhalt zu bekommen, aber ich denke, ich die meisten der Missbrauch durch kommen mit einem anständigen „geheimen“ Algorithmus basiert auf einer Art gemeinsamen geheimen Schlüssel auf beiden Seiten verhindern können, und haben die zugelassene Stelle gesetzt ein Session-Cookie, das von meiner PHP-Seite gelesen werden. Wenn das Cookie gültig ist und erfüllt meine Kriterien, werde ich den Inhalt anzeigen, sonst werde ich nicht. Die Informationen, die ich schützen bin nicht missionskritische, versuche ich es nur um zu verhindern, missbraucht zu werden.

Andere Tipps

Leider ist dies nicht möglich sein wird.

Mit Javascript können Sie überprüfen, um zu sehen, ob Ihre Seite in einem anderen Rahmen eingebettet ist, aber dies wird nicht narrensicher sein wie Javascript in einigen Leuten Browser ausgeschaltet werden kann.

Zum Beispiel können Sie das folgende Javascript ausführen, um Ihre Seite Reparent wenn das die Absicht ist:

if (top.location != location) {
  top.location.href = document.location.href ;
}

Das Nachdenken über diese ... Ich bin nicht überzeugt, ist völlig sicher, aber hier ist ein Schuss, während ich darüber nachdenke mehr -

Die einzige Möglichkeit, dies tun könnte, ist, wenn Sie die Websites steuern es in eingebettet wäre, wenn Sie sie kontrollieren, können Sie die Zeit verstreichen konnte, verschlüsselt von der Frame-Set mit dem Rahmen.

 <iframe src="http://yourdomain/frame.php?key=p21n9u234p8yfb8yfy234m3lunflb8hv" />

frame.php dann die Nachricht entschlüsselt die Zeit in einem kleinen Dreieck (etwa 10 Sekunden) zu finden. Da frame.php nur akzeptabel Websites kennt die Zeit verschlüsselt haben könnten, es weiß, dass es in Ordnung ist, selbst anzuzeigen. Ansonsten gibt es nichts.

Alles andere, ob es Javascript oder HTTP_REFER ist, kann gefälscht werden, ausgeschaltet oder umgangen werden.

Und in der Tat, mit dieser URL, wird ein Angreifer in der Lage Ihren Rahmen überall zu zeigen, solange die Benutzer lädt sie innerhalb von 10 Sekunden. So würde der Angreifer nur die akzeptierte Website kratzen, und den Schlüssel greifen. Wenn das Bedrohungsmodell für Sie nicht annehmbar ist -. Dann gibt es wirklich nichts, was man (außer vielleicht ein noch komplizierteres Protokoll) tun kann,

Ich würde dieses die gleiche Art und Weise implementieren, dass Google AdSense implementiert. Anstatt sie in ihrer Website den iframe-Code einbetten, die, stattdessen haben sie einige Javascript einbetten, die eine Kontonummer enthält:

<script type="text/javascript"><!--
myiframe_client = "12345";
myiframe_width = 728;
myiframe_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://www.example.com/scripts/show_iframe.js">
</script>

Mindestens diese Weise können Sie verwalten können, die Ihre iframe Inhalte auf einer Pro-Account Basis zeigt. Wenn jemand unberechtigte Versuche, Ihre iframe verwenden möchten, können Sie das Konto deaktivieren. Sie können auch Eigenschaften des Dokuments durch Javascript untersuchen (innerhalb der Sicherheitseinschränkungen des Browsers) unbefugten Zugriff zu verhindern.

Screen Scraping könnte eine mögliche Lösung sein hier.

die Zugriffsliste auf Ihrer Website einrichten zu nur Anfragen akzeptiert von dem genehmigten Websites Web-Server kommen und ein Sicherheitstoken, um sie auszustellen. Das ist der einfache Teil.

Das Entwicklerteam an ihrem Ende eine Relaying-Servlet-Setup benötigt, um Ihre Inhalte zu bekommen und es dann an die Benutzer angezeigt wird (nach all relevanten URLs umschreiben).

Dies kann recht kompliziert sein, aber man wäre besser in der Lage zu kontrollieren, wer die Website zugreift. Darüber hinaus, dass Sie alle Sicherheitstoken wird nicht an den Web-Benutzer sichtbar auszustellen, da sie nur zwischen den beiden Webservern übertragen werden sollen.

Sie können MD5 (oder für eine bessere Sicherheit verschlüsseln), um die Client-IP ein geheimes Salz + Datum und übergeben Sie diese als Parameter in iframe src URL. Im iframe tun Sie die gleiche Sache und überprüfen, ob das Ergebnis der gleiche wie der Parameter ist; wenn nicht, verweigert den Zugriff

Könnten Sie nicht die $_SERVER['HTTP_REFERER'] überprüfen, um sicherzustellen, dass es eine bestimmte Zeichenfolge enthält?

if (strpos('http://example.com', $_SERVER['HTTP_REFERER']) !== false) {
    // allowed
}

In Ihrem Fall Sie könnte die Adresse zuerst, dann überprüfen, ob in_array() analysieren möchten.

Dies wird nicht narrensicher wie Menschen fälschen kann die Referrer, ABER vielleicht könnten Sie mit einer anderen Kommunikation zwischen den zwei Servern eine Art von 1 mit den Tasten tun. Wenn der Schlüssel verwendet wurde, dann nicht gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top