none
FormsAuthentication einfach zu umgehen? RRS feed

  • Frage

  • Hallo,

    ich verwende Formsauthentication, aber entweder ich mache etwas falsch oder die Formsauthentication ist total sinnlos.

    Grundsätzlich funktioniert alles wie es soll, aber wenn ich mich auf der Webseite einlogge kann ich mir mittels Firefox das verschlüsselte Authentication-Cookie angucken und in die Zwischenablage kopieren.

    Anschließend habe ich mich von der Seite ausgeloggt, Firefox neugestartet und mir mit einem FF Addon ein Cookie erstellt und als Wert den zuvor kopierten Inhalt eingetragen. Das hatte zum Ergebniss, dass ich vollen Zugriff auf die Seite hatte. Funktioniert auch, wenn ich mich auf einem anderen Rechner mit dem so kopierten Cookie anmelde.

    Ich dachte eigentlich, dass Asp.net auf dem Server noch irgendwelche Logik ausführt (Abgleich der Client-IPs o.ä.).

    Hier der entsprechende Ausschnitt aus meine Web.config:

     

    <authentication mode="Forms">
          <forms name="AUTHNAME" loginUrl="~\Home\Login.aspx" protection="All" timeout="1">
          </forms>
        </authentication>
    

    Folgenden Code verwende ich im Login-Button:

    bool isAuthenticated = this.IsAuthenticated(user, password);
    
          if (isAuthenticated)
          {
            FormsAuthentication.Initialize();
    
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
            1, user, DateTime.Now, DateTime.Now.AddMinutes(10), false, GetRoles(user),FormsAuthentication.FormsCookiePath);
    
            string hash = FormsAuthentication.Encrypt(ticket);
            HttpCookie cookie = new HttpCookie(
            FormsAuthentication.FormsCookieName, hash);
            context.Response.Cookies.Add(cookie);
    
            context.Response.Redirect(@"~\Default.aspx");
          }
    
    Wie kann ich das ganze absichern?

    Donnerstag, 22. Juli 2010 18:12

Antworten

  • Hi,

    Anschließend habe ich mich von der Seite ausgeloggt, Firefox neugestartet und mir mit einem FF Addon ein Cookie erstellt und als Wert den zuvor kopierten Inhalt eingetragen. Das hatte zum Ergebniss, dass ich vollen Zugriff auf die Seite hatte. Funktioniert auch, wenn ich mich auf einem anderen Rechner mit dem so kopierten Cookie anmelde.

    was soll der Server auch sonst machen, wenn der Browser ihm das richtige Cookie schickt? Bedenke dabei, dass es oft vorkommt, dass sich die IP Adresse auch innerhalb einer Sitzung, zumindest aber nach einer gewissen Leerlaufzeit, ändert.

    Wenn bspw. ein User sich einloggt, danach dann bspw. 30 Minuten abwesend ist und danach dann weiter macht, ist das Cookie dasselbe, seine IP evtl. aber nicht (die meisten User haben dynamische IP Adressen und viele Router trennen die Verbindung nach einer gewissen Leerlaufzeit).

    Du kannst natürlich selbst noch eine Abfrage auf die IP Adresse einbauen. In dem Fall müsstest Du bei der ersten Erstellung des Cookies die IP verschlüsselt mit ablegen und die IP, von der aus dann später zugegriffen wird, mit diesem Wert vergleichen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 22. Juli 2010 19:10
    Moderator