Formular-basierte Basic Authentication
Kategorie: Sicherheit Basic Authentication ist an und für sich eine sehr praktische und einfache Möglichkeit ganze Verzeichnisse (und deren Inhalt - unabhängig welchen Dateiformats) zu schützen. Die im nachfolgenden gezeigte Methode soll nun zwei entscheidende Nachteile von Basic Authentication beheben: die unschöne Login-Dialogbox und die Verzeichnisauswahl via URL. Unser Login FormularAls erstes benötigen wir ein Formular, in das durch den Benutzer die zum Login benötigten Parameter eingegeben und übertragen werden können. Wichtig für die einwandfreie Zusammenarbeit mit dem im nächsten Abschnitt gezeigten ASP Script (login.asp) sind folgende Punkte:
Die Gestaltung des Formulars ist selbstverständlich völlig frei. Hier eben ein simples Formular, das man leicht graphisch anpassen kann (form.asp): <html> <head> <title></title> </head> <body bgcolor="#FFFFFF"> <form name="forLogin" method="post" action="login.asp"> <table width="180" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="left">Directory:</td> <td align="right"> <input type="text" name="txtDirectory" size="12" maxlength="20"> </td> </tr> <tr> <td align="left">User:</td> <td align="right"> <input type="text" name="txtUser" size="12" maxlength="20"> </td> </tr> <tr> <td align="left">Password:</td> <td align="right"> <input type="text" name="txtPassword" size="12" maxlength="20"> </td> </tr> <tr> <td align="left"> </td> <td align="right"> <input type="submit" value="Login"> </td> </tr> </table> </form> </body> </html> Und so sieht dann unser Loginformular im Browserfenster aus: Unser Login ScriptBeginnen wir mit einem Blick auf den Sourcecode am Anfang des Scripts, der uns einiges an späteren Kopfschmerzen ersparen wird: <%@Language="VBScript" EnableSessionState="False"%> <% Option Explicit Response.Buffer = True Response.AddHeader "cache-control", "no-store" Response.AddHeader "pragma", "no-cache" Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 In der ersten Zeile legen wir die verwendete Scriptsprache fest, und verhindern, daß für unser Script unnötige Sessions auf dem Server erzeugt werden. Durch Option Explicit wird die ausschließliche Verwendung der durch uns explizit deklarierten Variablen erzwungen. Mit Response.Buffer und den erweiterten Headern ersparen wir uns Caching-Probleme bei Browser und Proxy. Nun werden die drei benötigten Variablen deklariert , und ihnen mittels Request.Form die mit dem Formular (form.asp) übergebenen Werte zugewiesen: Dim strUser, strPassword, strDirectory strUser = Request.Form("txtUser") strPassword = Request.Form("txtPassword") strDirectory = Request.Form("txtDirectory") Im Nachfolgenden wird die Verbindung zur Datenbank aufgebaut und ein Recordset erzeugt. Gesucht wird hier mittels einer SQL-Abfrage nach einer Zeile in der Tabelle ("YourTable"), die exakt die vom Formular (form.asp) übergebenen drei Parameter in den entsprechenden Spalten aufweist: Dim rsUser Set rsUser = Server.CreateObject("ADODB.Recordset") rsUser.ActiveConnection = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & _ Server.MapPath("YourDataBase.mdb") & "; UID=; PWD=YourPassword" rsUser.Source = "SELECT COUNT (*) FROM YourTable WHERE Directory = '" & (strDirectory) & _ "' AND User = '" & (strUser) & "' AND Password = '" & (strPassword) & "'" rsUser.CursorType = 0 'adOpenForwardOnly rsUser.CursorLocation = 2 'adUseServer rsUser.LockType = 3 'adLockOptimistic rsUser.Open Wenn die Abfrage eine entsprechend gültige Zeile als Ergebnis hat, setzt das Script mit dem nächsten Block fort : If rsUser.Fields(0).Value = 1 Then Soweit war das nun alles nichts Neues, der kleine "Kniff", mit dem wir es schaffen, dem Browser die vom User eingegeben Parameter (Verzeichnis, Benutzer, Kennwort) zu übergeben, folgt in diesem Teil des Scripts. Hier wird dem Browser als Antwort eine minimale HTML-Datei geschickt, deren einzige Aufgabe darin besteht, unmittelbar folgende URL aufzurufen: http://User:Password@YourDomain.com/Directory Auf diese Weise werden alle benötigten Daten an den Server übergeben, und die lästige und unschöne Paßwort Dialogbox unterdrückt: Response.Write "<html>" Response.Write "<head>" Response.Write "<title></title>" Response.Write "<meta http-equiv=""refresh"" content=""0; url=http://" & _ (strUser) & ":" & (strPassword) & "@YourDomain.com/" & _ (strDirectory) & """" & ">" Response.Write "</head>" Response.Write "<body>" Response.Write "</body>" Response.Write "</html>" Sollten die vom Nutzer eingegebenen Daten (Verzeichnis, Benutzer, Kennwort) keine Entsprechung in der Datenbank gefunden haben, wird er hier im Beispiel einfach wieder mit Response.Redirect("form.asp") auf das Login_Formular zurückgeschickt: Else Response.Redirect("form.asp") End If Zuletzt wird das Recordset wieder geschlossen und auch der Speicherbereich geleert: rsUser.Close Set rsUser = Nothing %> SchlußbemerkungDie heute vorgestellte Methode hat einen Nachteil: Alle Benutzer müssen zusätzlich in einer Datenbank (oder Flatfile) geführt werden. Allerdings, einen großen Vorteil hat sie auch: Nicht alle .asp-Dateien müssen im Gegensatz zu einer rein ASP-basierten Authentication Lösung mit einem zusätzlichen Include versehen werden, es werden alle Dateitypen im Verzeichnis geschützt, es werden keine Servererweiterungen benötigt, die meist Geld kosten und bei gemietetem Webspace ohnehin nicht installiert sind. Es gibt auch einige Erweiterungsmöglichkeiten, so kann zB die Sicherheit durch Verwendung eines SSL geschützten Bereiches deutlich gesteigert werden. Zudem könnte man fehlerhafte Loginversuche mit Angabe von (Verzeichnis, Benutzer, Kennwort, IP-Adresse, Datum, Uhrzeit) erfassen. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
ASP-basierte Basic Authentication Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |