{"id":320,"date":"2007-11-05T23:32:25","date_gmt":"2007-11-05T21:32:25","guid":{"rendered":"http:\/\/www.mitternachtshacking.de\/blog\/320-http-basic-authentication-fast-richtig-gemacht"},"modified":"2025-04-05T22:41:52","modified_gmt":"2025-04-05T20:41:52","slug":"http-basic-authentication-fast-richtig-gemacht","status":"publish","type":"post","link":"https:\/\/www.mitternachtshacking.de\/blog\/320-http-basic-authentication-fast-richtig-gemacht","title":{"rendered":"HTTP Basic Authentication fast richtig gemacht"},"content":{"rendered":"<p>Es gibt mehrere M\u00f6glichkeiten, einen Benutzer einer Webseite zu authentisieren. Die klassischen beiden Methoden sind:<\/p>\n<ul>\n<li>HTTP Basic\/Digest Authentication<\/li>\n<li>Form-based Authentication mit Cookies<\/li>\n<\/ul>\n<p>Die meisten Webseiten verwenden heute formularbasierte Authentisierung, d.h. irgendwo in der Webseite ein Eingabeformular f\u00fcr Login und Passwort, das an ein Programm auf dem Webserver geschickt wird der die Eingabe \u00fcberpr\u00fcft und bei korrekter Anmeldung ein Session-Cookie zur\u00fcckgibt, das als Nachweis der erfolgreichen Anmeldung fungiert. Praktisch alle Seiten die ich kenne und auch alle Freemailer, egal ob z.B. web.de, GMX, Hotmail, etc. und alle Banken arbeiten so. Das hat mehrere Gr\u00fcnde:<\/p>\n<ol>\n<li>Das Formular l\u00e4sst sich beliebig im Design der Webseite unterbringen w\u00e4hrend das HTTP Authentication Popup durch den Browser dargestellt wird und sich nicht im Corporate Design darstellen l\u00e4sst.<\/li>\n<li>Die formularbasierte Authentisierung wird von einem serverseitigen Programm angenommen, das die Benutzer z.B. gegen eine SQL-Datenbank verifizieren l\u00e4sst. Eine gro\u00dfe Anzahl von Benutzern l\u00e4sst sich so einfach verwalten.<\/li>\n<li>Die formularbasierte Authentisierung unterst\u00fctzt problemlos auch Einmalpassw\u00f6rter, Token (z.B. RSA SecurID) und Zertifikate. Die HTTP Basic\/Digest Authentisierung wird meistens direkt vom Webserver durchgef\u00fchrt und verwendet einfache Passwort-Dateien (ja, es gibt z.B. f\u00fcr den Apache Module die starke Authentisierung erm\u00f6glichen aber dann wird es schnell beliebig kompliziert).<\/li>\n<li>Das HTTP Basic\/Digest Authentication Passwort wird vom Browser ohne eine Lebenszeit gespeichert w\u00e4hrend sich einem Cookie trivial eine Lebenszeit und damit eine G\u00fcltigkeitsdauer mitgeben l\u00e4sst.<\/li>\n<\/ol>\n<p>Wenn auf einer Webseite dann doch noch HTTP Basic\/Digest Authentisierung verwendet wird ist das folglich ein Grund, einmal genauer nachzuschauen. Als Beispiel verwende ich hier eine Seite des CCC, das <a href=\"https:\/\/cccv.pentabarf.org\/submission\/24C3\/\">Paper Submission System<\/a> f\u00fcr den 24C3 Kongress auf Pentabarf.org, viele andere Seiten leiden aber unter dem gleichen Problem.<\/p>\n<p>Die Anmeldung auf der Seite nach Anlegen eines Benutzers und eines Passworts erfolgt \u00fcber das Popup-Fenster des Webbrowsers: &#8222;Geben Sie Benutzernamen und Passwort f\u00fcr Pentabarf ein&#8220;. Das Fenster selbst wird durch den Browser erzeugt, hier wird offensichtlich HTTP Basic\/Digest Authentisierung verwendet:<\/p>\n<p><img loading=\"lazy\" src=\"\/blog\/wp-content\/uploads\/2007\/11\/pentabarf1.gif\" width=\"510\" height=\"373\" \/><\/p>\n<p>Firefox bietet mir hier an, das Passwort im Passwort-Manager zu speichern aber das will ich normalerweise lieber nicht haben. Nach der Anmeldung kann man dann seinen Vortrag f\u00fcr den <a href=\"http:\/\/events.ccc.de\/congress\/2007\/\">24C3<\/a> eintragen.<\/p>\n<p><img loading=\"lazy\" src=\"\/blog\/wp-content\/uploads\/2007\/11\/pentabarf2.gif\" width=\"510\" height=\"373\" \/><\/p>\n<p>Ich will ja eigentlich schon seit geraumer Zeit mal was erz\u00e4hlen aber bisher habe ich weder ein ausreichend spannendes Thema noch genug Zeit gefunden, einen ansprechenden Vortrag vorzubereiten. Naja, vielleicht 2008 \ud83d\ude09<\/p>\n<p>Die Seite bietet in der linken Spalte einen Men\u00fcpunkt &#8222;Logout&#8220;. Das ist interessant, weil es keine triviale Methode gibt, das im Browser gespeicherte Passwort zu l\u00f6schen. Mal sehen, was passiert:<\/p>\n<p><img loading=\"lazy\" src=\"\/blog\/wp-content\/uploads\/2007\/11\/pentabarf3.gif\" width=\"510\" height=\"373\" \/><\/p>\n<p>Hier fangen die Probleme an. Da es keine einfache M\u00f6glichkeit gibt, den Browser das Passwort vergessen zu lassen, versucht die Seite hier einen etwas unsauberen Trick. Die einzige M\u00f6glichkeit, einen Browser das Passwort einer Domain vergessen zu lassen ist, den Browser f\u00fcr die gleiche Domain eine neue Login\/Passwort-Kombination speichern zu lassen. Daf\u00fcr richtet man \u00fcblicherweise eine spezielle Seite ein, f\u00fcr die z.B. die Kombination logout\/&lt;kein Passwort&gt; g\u00fcltig ist. Der Nutzer klickt auf den Logout-Link, das alte Passwort ist ung\u00fcltig und wenn der Nutzer best\u00e4tigt, wird die gespeicherte Login\/Passwort-Kombination im Browser \u00fcberschrieben.<\/p>\n<p><img loading=\"lazy\" src=\"\/blog\/wp-content\/uploads\/2007\/11\/pentabarf4.gif\" width=\"510\" height=\"373\" \/><\/p>\n<p>Leider kann man dabei ein paar Sachen falsch machen:<\/p>\n<p>Wenn der Anwender oben auf &#8222;nein&#8220; bzw. &#8222;cancel&#8220; klickt, \u00fcbernimmt der Browser die neuen Anmeldedaten nicht, das alte Login\/Passwort bleibt weiterhin g\u00fcltig.<\/p>\n<p>Die Logout-URL verwendet &#8222;logout@cccv.pentabarf.org&#8220;, Benutzername in einer URL wird jedoch vom Internet Explorer seit dem kumulativen Sicherheitsupdate f\u00fcr den Internet Explorer (832894) vom 2. Februar 2004 nicht mehr unterst\u00fctzt. Da gab es leider zu viele Phishing-Versuche und ahnungslose Nutzer sind reihenweise auf URLs wie www.postbank.de@xyz.hk reingefallen und haben ihre PINs und TANs eingegeben. Das Verfahren funktioniert mit dem Internet Explorer so folglich gar nicht.<\/p>\n<p>Mein Firefox (2.0.0.9) ist davon auch nicht beeindruckt, er scheint sich das alte Passwort und das neue Passwort auch gleich zu merken. Jedenfalls komme ich mit der &#8222;Back&#8220;-Taste oder einem Relogin ohne Eingabe des Passworts wieder auf die Inhalte:<\/p>\n<p><img loading=\"lazy\" src=\"\/blog\/wp-content\/uploads\/2007\/11\/pentabarf5.gif\" width=\"510\" height=\"373\" \/><\/p>\n<p>In meinem Firefox kann ich via Extras -&gt; Private Daten l\u00f6schen (Strg+Umschalt+Entf) alle gespeicherten Daten l\u00f6schen, dann sind die Passw\u00f6rter auch weg. Auf meinem Arbeitsplatzrechner ist mir das eigentlich auch egal, da kommt niemand au\u00dfer mir hin. Im Internet Caf\u00e9 muss man leider dran denken, die Passw\u00f6rter niemals in den Passwort-Manager zu \u00fcbernehmen und den Browser nach dem Zugriff auf so eine Seite immer schlie\u00dfen, damit die gespeicherten Daten verloren gehen.<\/p>\n<p>Das ist jetzt sicher keine gef\u00e4hrliche L\u00fccke aber mit den aufkommenden Cross Site Request Forgeries (CSRF) sollte man auf solche Probleme vermehrt achten. Ach ja, ich sch\u00e4tze die Schwachstelle nicht so kritisch ein, dass ich sie vorher h\u00e4tte melden m\u00fcssen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt mehrere M\u00f6glichkeiten, einen Benutzer einer Webseite zu authentisieren. Die klassischen beiden Methoden sind: HTTP Basic\/Digest Authentication Form-based Authentication mit Cookies Die meisten Webseiten verwenden heute formularbasierte Authentisierung, d.h. irgendwo in der Webseite ein Eingabeformular f\u00fcr Login und Passwort, das an ein Programm auf dem Webserver geschickt wird der die Eingabe \u00fcberpr\u00fcft und bei [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,10],"tags":[],"_links":{"self":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts\/320"}],"collection":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/comments?post=320"}],"version-history":[{"count":0,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/posts\/320\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/media?parent=320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/categories?post=320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mitternachtshacking.de\/blog\/wp-json\/wp\/v2\/tags?post=320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}