top-secret siehe topsecret
Ew: streng geheim
– Die aktuelle deutsche Rechtschreibung,
Naumann & Göbel 1997 Kapitel 28 Top Secret: Passwortschutz
Eines der Ziele, auf dem die Idee des Internet fußt, ist der freie und unbeschränkte Zugriff auf Informationen. Mit der Kommerzialisierung des Webs entstand jedoch die Notwendigkeit, nur einem begrenzten Personenkreis den Zugriff auf bestimmte Bereiche einer Website zu gewähren.
Doch nicht nur merkantile Absichten erfordern einen geschützten Bereich, auch persönliche Informationen wie beispielsweise Bewerbungsunterlagen, die online übertragen werden, sollten nicht für jedermann und -frau einsehbar sein.
Mit serverseitigen Mitteln ist das kein größeres Problem: Ein Benutzername und ein Passwort können als Teil der HTTP-Anforderung an den Webserver übertragen werden, und der Webserver kann diese Daten mit den gespeicherten Informationen auf dem lokalen System überprüfen. Passen der Benutzername und das Passwort zusammen, wird das angeforderte Dokument übertragen, andernfalls wird ein Error-Code 401 zurückgegeben – Authorization required (siehe Abbildung 25.1).
 Hier klicken, um das Bild zu Vergrößern
Abbildung 28.1 Fehlermeldung bei keinem (oder falschem) Passwort
Eine der häufigsten Fragen lautet nun, ob dies auch mit JavaScript möglich sei. Um die Antwort gleich vorwegzunehmen: nein, leider nicht. Egal, was die Leute Ihnen erzählen mögen, ein hundertprozentiger Schutz besteht bei clientseitigen Methoden nicht, denn der Code kann mit ein wenig krimineller Energie eingesehen, analysiert und letztendlich geknackt werden. Serverseitige Mittel sind jedoch gleichzeitig teuer und mühsamer zu implementieren, weswegen sich JavaScript unter Umständen als Alternative anbietet. Im Folgenden werden Sie einige Möglichkeiten kennenlernen, um den subversiven Elementen, die unerlaubten Zugriff erhalten möchten, das Leben möglichst schwer zu machen. Die PIN Ihrer EC-Karte sollten Sie dennoch nicht auf diese Art und Weise schützen – und sie sowieso am besten nicht online verwalten. Denn das wäre eine genauso kluge Idee, wie die Nummer direkt auf die Karte zu schreiben und sie an einem Geldautomaten liegen zu lassen.
28.1 URL aus Passwort  
Die wohl einfachste Methode, einen Bereich per Passwort zu schützen, besteht darin, die eigentliche URL dieses Bereichs einfach nicht zu verraten.
28.1.1 Passwort == URL  
Das »Passwort«, das in diesem Fall eingegeben werden muss, entspricht dann meistens der eigentlichen, geheimen URL:
<html>
<head>
<title>Top Secret</title>
<script type="text/javascript"><!--
function check(f) {
var pwd = f.elements["pass"].value;
location.href = pwd;
}
//--></script>
</head>
<body>
<h1>Passwortabfrage</h1>
<form onsubmit="check(this); return false;">
<input type="password" name="pass" />
<input type="submit" value="Login" />
</form>
</body>
</html>
 Hier klicken, um das Bild zu Vergrößern
Abbildung 28.2 Die Passwortabfrage im Browser
Das Passwort hat in diesem Fall oftmals die Form »xlbrmf.html« oder »geheimesverzeichnis/geheimedatei.html«, und die eigentlichen geheimen Daten sind nicht weiter geschützt. Kennt der Feind die URL, kennt er deren Inhalte, denn diese URL kann auch direkt durch Eingabe im Webbrowser aufgerufen werden.
Ganz nebenbei deutet das Passwort schon auf die Art des verwendeten Zugriffsschutzes hin, und auch Leute, die berechtigt Zugriff auf die geheimen Inhalte haben, werden das System durchschauen und die Passwort-abfrage schlichtweg umgehen, indem sie die URL von Hand zusammensetzen. Diese Situation kann man aber noch ein wenig verbessern.
28.1.2 Passwort » URL  
Es stellt nur eine Verbesserung dar, die URL aus dem Passwort zusammenzusetzen, beispielsweise indem ein weiteres Verzeichnis vorangestellt und ein spezielles Zeichen angefügt wird. Auch, wenn das nicht mehr ganz so durchsichtig ist, das eigentliche (schwache) Schutzprinzip bleibt dasselbe: Die URL selbst ist ungeschützt.
<html>
<head>
<title>Top Secret</title>
<script type="text/javascript">
function check(f){
var pwd = f.elements["pass"].value;
var url = "geheimverzeichnis/";
url += pwd;
url += "-geheim.html";
location.href = url;
}
//--></script>
</head>
<body>
<h1>Passwortabfrage</h1>
<form onsubmit="check(this); return false;">
<input type="password" name="pass" />
<input type="submit" value="Login" />
</form>
</body>
</html>
Lautet das Passwort nun beispielsweise »galileo«, so würde die (relative) URL geheimesverzeichnis/galileo-geheim.html aufgerufen werden.
28.1.3 f : Passwort ® URL  
Eine weitere Idee besteht darin, die URL zwar aus dem Passwort zu erzeugen, den Zusammenhang aber nicht so offensichtlich wie oben darzustellen.
In Kapitel 27 haben Sie die Funktionen codeschutz_encode() und codeschutz_decode() kennen gelernt, die eine Zeichenkette durch die Verschiebung von Buchstaben verschlüsseln (z. B. wird aus einem a ein b, aus b wird c und so weiter; aus z wird a). Ihnen stehen nun zwei Varianten zu Verfügung:
|
Sie geben dem geheimen Verzeichnis (oder der geheimen Datei) einen sprechenden Namen (zum Beispiel »geheim«). Das Passwort muss nun derart beschaffen sein, dass die Anwendung von codeschutz_decode() (oder wahlweise codeschutz_encode()) »geheim« zurückliefert. |
|
Sie geben dem Passwort einen sprechenden Namen (zum Beispiel »geheim«). Der Name des versteckten Verzeichnisses oder der versteckten Datei muss das Ergebnis der Anwendung von codeschutz_decode() oder codeschutz_encode() auf das Passwort sein. |
Bei der Verwendung einer Schrittweite von 1 bei der Verschlüsselung würde aus »geheim« der String »hfifjn« werden (denn codeschutz_ encode("geheim", 1) ergibt "hfifjn"). Sie haben also zwei Möglichkeiten:
|
Das Passwort ist »hfifjn« (oder, bei der Verwendung von codeschutz_decode(), »fdgdhl«), und der Verzeichnisname lautet »geheim«. |
|
Das Passwort ist »geheim«, und der Verzeichnisname ist – je nachdem, ob codeschutz_decode() oder codeschutz_encode() verwendet wird – »hfifjn« oder »fdgdhl«. |
Je nach Art Ihrer Website und Ihrer Zielgruppe sollten Sie sich überlegen, ob Sie Ihren Besuchern ein schwer zu merkendes Passwort zumuten können oder ob Sie dann doch lieber dem geheimen Verzeichnis einen kryptischen Namen geben.
Im Folgenden sehen Sie Code, der das Passwort decodiert (oder codiert) und dann die entsprechende URL aufruft:
<html>
<head>
<title>Top Secret</title>
<script type="text/javascript"><!--
function codeschutz_encode(s, delta) {
var temp = "";
var alt, neu;
for (var i=0; i<s.length; i++) {
alt = s.charCodeAt(i);
if (alt>=65 && alt<=90) {
neu = alt + delta;
if (neu > 90) {
neu -= 26;
}
} else if (alt>=97 && alt<=122) {
neu = alt + delta;
if (neu > 122) {
neu -= 26;
}
} else {
neu = alt;
}
temp += String.fromCharCode(neu);
}
return temp;
}
function check(f) {
var pwd = f.elements["pass"].value;
url = codeschutz_encode(pwd, 13);
location.href = url;
}
//--></script>
</head>
<body>
<h1>Passwortabfrage</h1>
<form onsubmit="check(this); return false;">
<input type="password" name="pass" />
<input type="submit" value="Login" />
</form>
</body>
</html>
Die hier vorgestellten Methoden haben alle eines gemeinsam: Sie bauen darauf, dass die URL der geheimen Inhalte tatsächlich geheim ist. Sobald die URL bekannt ist, kann sie auch direkt aufgerufen werden, es gibt keinen Schutz. Im nächsten Abschnitt lernen Sie Methoden kennen, um die eigentlichen Seiten ebenfalls zu schützen – mit JavaScript natürlich.
|