27.7 Code serverseitig generieren
Was wäre, wenn Sie die folgenden zwei Schutzmechanismen kombinieren würden?
|
Verwendung einer externen .js-Datei |
|
Verhinderung des Cachings der Datei |
Dann gäbe es nur noch eine Möglichkeit, den Schutz zu knacken: durch die direkte Eingabe der URL in die Adressleiste des Browsers.
Um hierfür eine entsprechende Strategie zu entwickeln, benötigen wir zwei Testdateien. Die erste ist eine (fast leere) HTML-Datei:
<html>
<head>
<script type="text/javascript" src="js.php"></script>
</head>
<body>
</body>
</html>
Die Datei js.php ist – wie Sie sofort erkennen – ein PHP-Skript, das JavaScript-Code ausgeben muss. Damit das folgende Beispiel auch funktioniert, muss bei Ihnen natürlich PHP korrekt installiert sein.
Der PHP-Code macht nun Folgendes:
|
Er wirft einen Blick auf alle Umgebungsvariablen und speichert diese in einem String. |
|
Dieser String wird mit einer JavaScript-alert()-Anweisung ausgegeben. |
Mehr zur Interaktion von serverseitigen und clientseitigen Mitteln finden Sie in Kapitel 25.
<?php
$x = "";
foreach ($_SERVER as $key => $value) {
if (is_string($value)) {
$value = htmlspecialchars($value);
}
$x .= "Schlüssel: $key; Wert: $value\\n";
}
$x = str_replace("\n", '', $x);
echo("alert('$x');");
?>
Rufen Sie nun die Datei js.html in Ihrem Browser auf. Wegen der serverseitigen Mittel dürfen Sie die Datei nicht über das Dateisystem starten (also nicht C:\...\js.html aufrufen), sondern müssen über den Server gehen (z. B. http://localhost/js.html).
Nach kurzer Zeit erscheint ein Warnfenster, das alle Servervariablen ausgibt. Dabei gibt es zwischen den einzelnen Browsern leider Unterschiede. Der Internet Explorer setzt nämlich die Variable HTTP_REFERER auf die HTML-Seite, in der die .js-Datei eingebaut worden ist, auch moderne Mozilla-Browser. Aber man kann sich nicht bei allen Browsern darauf verlassen (einige bieten an, dass der Referer nicht geschickt wird), weswegen das nun folgende Vorgehen nur bedingt funktioniert:
|
In dem serverseitigen Skript, das die JavaScript-Datei erzeugt, wird die Variable HTTP_REFERER abgefragt. |
|
In dieser wird nachgeschaut, welche HTML-Seite das Skript aufruft. Die Adresse dieser HTML-Seite muss dann den korrekten Servernamen enthalten (beispielsweise http://www.xy.de/ oder http://10.11.12.13/). |
|
Falls diese Werte stimmen, wird JavaScript-Code zurückgegeben, ansonsten nichts (oder eine Fehlermeldung). |
Hier klicken, um das Bild zu Vergrößern
Abbildung 27.8 Der Internet Explorer setzt HTTP_REFERER.
Das folgende PHP-Skript nimmt die erforderliche Überprüfung vor:
<?php
header('Pragma: no-cache');
$r = $_SERVER['HTTP_REFERER'];
if (strpos($r, 'http://www.xy.de/') == 0 ||
strpos($r, 'http://10.11.12.13/') == 0) {
echo("alert('Alles ok!');");
}
Sie müssen dann nur noch das Skript entsprechend in den HTML-Code einbauen:
<script type="text/javascript"
src="js-servercheck.php"></script>
Bedenken Sie aber, dass dieses Verfahren nur mit dem Internet Explorer funktioniert; Benutzer anderer Browser sehen in die Röhre.
Dafür funktioniert es vergleichsweise zuverlässig. Es gibt nur zwei Möglichkeiten, auf den Code zuzugreifen:
|
Sie werden im Browser-Cache fündig (wenn der Browser die Cache-Anweisung mal wieder ignoriert hat). |
|
Sie verwenden ein spezielles Programm, das die Angabe des HTTP-Referers fälscht. |
Sie sehen also: Mit ein wenig Aufwand können Sie zumindest ein wenig Schutz für Ihren Code erreichen. Hundertprozentige Sicherheit ist aber nicht zu gewährleisten. Aus diesem Grund sollten Sie in Erwägung ziehen, Ihre Energien für die Programmierung von mehr Funktionalität zu verwenden und nicht darauf, Ihren Code (ergebnislos) zu schützen.
1 Wenn Sie jeweils 13 Zeichen weitergehen, haben Sie das ROT13-Verfahren, das einige Mail-Clients zur Verschlüsselung anbieten. Da das Alphabet 26 Zeichen hat, ist es egal, ob Sie 13 Zeichen nach vorn oder nach hinten gehen.
|