Sicherheitscheck | Benutzerauthentifizierung

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von sevY, 10.07.2004.

  1. sevY

    sevY Thread Starter Gast

    Hi zusammen,

    ich habe ein CMS für einen Kunden erstellt, welches ich aus diversen Gründen nicht via HT Authentication schützen kann bzw. möchte.

    Als Lösung habe ich nun folgendes:

    Beim Aufrufen der Startseite des CMS wird geprüft, ob eine Session mit der entsprechenden Variablen existiert.

    PHP:
    <?php
    session_start
    ();
    if(!
    $_SESSION['user'])
        {
        echo
    '<body onload="javascript:login();">';
        }
    else
        {
        echo
    '<body>';
        }
    ?>
    Nehmen wir an, der User hat sich noch nicht ausgewiesen. Es öffnet sich als das Login Fenster:

    PHP:
    <?php
    require_once('config.inc.php');
    if(
    $_POST['action']=='login')
        {  
        
    $read=mysql_query("select password from $db_tab_users where login='administrator'",$handler);
        
    $a=mysql_fetch_array($read);    
        if(
    $a['password']==$_POST['password'])
            {
            
    session_start();
            
    $_SESSION['user']=true;
            
    setcookie(session_name(), session_id(), time()+3600);
            echo
    '<meta http-equiv="refresh" content="0; URL=javascript:window.close();">';
            exit();
            }
        else
            {
            echo
    '<meta http-equiv="refresh" content="0; URL=javascript:alert(\'Anmeldung fehlgeschlagen!\');">';
            }
        }
    ?>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> 
    <meta http-equiv="expires" content="0">
    <meta http-equiv="pragma" content="no-cache">
    <meta name="robots" content="noindex,nofollow"> 
    <link rel="stylesheet" type="text/css" href="default.css">
    <script language="javascript" type="text/javascript" src="function.inc.js"></script>
    </head>
    <body bgcolor="#1f1f1f">
    <table width="100%" height="100%">
        <tr>
            <td align="center" valign="middle">
                <table>
                    <tr>
                        <td align="center" valign="middle">
                            <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
                                <input type="hidden" name="action" value="login">
                                <input type="text" name="password" value="Passwort"><p>
                                <input type="submit" value="Login">
                            </form>
                        </td>
                    </tr>
                    <tr>
                        <td align="center" valign="middle">
                            Stellen Sie sicher, das <b>Cookies</b> in Ihrem Browser aktiviert sind.
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
    </body>
    </html>
    Dort wird überprüft, ob das im Formular eingegebene Passwort mit dem in der MySQL Datenbank übereinstimmt.

    Wenn ja wird eine Sessionvariable mit dem Wert true gesetzt und die SessionID etc. in ein Cookie mit 1Std Gültigkeit geschrieben.


    Sämtliche Dateien, die nun Aktionen ausführen haben folgende Datei included:

    PHP:
    <?php
    session_start
    ();
    if(!
    $_SESSION['user'])
        {
        die();
        }
    ?>

    Ich frage mich nun, wie sicher ist meine Lösung?

    Über die Browserzeile werden ja logischerweise keine Variablen übergeben, also fällt die Möglichkeit dort etwas zu injizieren aus. Nur wenn ein rechtmäßiger User seine SessionID weitergibt, könnte jemand anders dort zugreifen.

    Das einzige was mir in den Sinn kommen würde ist, das der Angreifer entweder „irgendwie“ diese Sessionvariable, dessen Namen er nicht kennt, registrieren müsste oder an das Cookie, welches beim rechtmäßigen Client ist, herankommen müsste, um die SessionID & co zu bekommen.

    Wie sicher schätzt ihr meine Lösung ein?

    Fort Knox soll das ganze nicht werden. Wichtig ist nur, das jemand, der mehr oder weniger aus „Versehen“ auf das CMS stößt oder vielleicht auch absichtlich versucht, falsche Inhalte via CMS einzutragen oder etwas zu löschen, abgehalten wird.

    Liebe Grüße

    Yves
     
  2. mikne64

    mikne64 MacUser Mitglied

    Beiträge:
    3.097
    Zustimmungen:
    92
    MacUser seit:
    02.04.2004
    Hallo Yves,

    vielleicht hilft Dir das weiter.

    Bei Devshed gibt es einige Artikel zum Thema PHP und Benutzerauthentifizierung, aber auch zum Thema Apache.
    Hier der Link zu allen PHP-Dokumenten dort
    http://www.devshed.com/c/a/PHP/

    Viele Grüße
    Michael
     
  3. sevY

    sevY Thread Starter Gast

    Hi,

    ich habe schon ein paar Artikel zu dem Thema gelesen.

    Es ist nun mal so, das der Kunde für ein umfassendes, administrierbares Usermanagement nicht genug zahlt.

    Daher wollte ich diese einfache Lösung mit dem Registrieren einer Sessionvariablen nehmen.

    Was meinst du, wie sicher ist diese?

    Liebe Grüße

    Yves
     
  4. mikne64

    mikne64 MacUser Mitglied

    Beiträge:
    3.097
    Zustimmungen:
    92
    MacUser seit:
    02.04.2004
    Hallo Yves,

    ich denke, daß das ein ganz gute Möglichkeit ist und auch recht sicher ist, wenn Du die SessionID des Nutzer durch alle Seiten "durchziehst".
    So verhinderst Du, daß jemand einfach die PHP-Seiten so aufrufen kann, ohne sich angemeldet zu haben und er wird zur Anmeldung zurückgeschickt.
    Und vielleicht zusätzlich noch ein Timeout z.B. von 20 Minuten, d.h. die Session-Variable wird nach 20 Minuten Inaktivität zerstört.

    Jetzt beginnt wahrscheinlich die Diskussion was noch besser und noch sicherer ist ;)

    Viele Grüße
    Michael
     
  5. sevY

    sevY Thread Starter Gast

    Hi,

    die einzelnen PHP Dateien sind doch durch require_once('auth.php'); geschützt!
    Wenn dort die Sessionvariable User nicht true ist, die();!

    Timeout habe ist vom Server defaultmäßig auf das Schließen des Browserfensters beschränkt.

    Find ich ok so.

    Liebe Grüße

    Yves

    (Also kann man das schon als sicher betrachten?)
     
  6. persil

    persil MacUser Mitglied

    Beiträge:
    199
    Zustimmungen:
    0
    MacUser seit:
    22.05.2004
    ja ist sicher.
    wenn du es noch sicherer willst, dann speicher IP und ssid in der DB am besten in der table der user ab. dann hat ein angreifer nurnoch chanchen am rechner/im netz von einem user.

    p.s. ich hätte da garnicht soviel drumrum gemacht. einfach schaun ob gültige session da ist. wenn nicht halt fehler und loginbox senden.
     
  7. Luxus_Hirsch

    Luxus_Hirsch MacUser Mitglied

    Beiträge:
    70
    Zustimmungen:
    0
    MacUser seit:
    15.01.2005
    Wie kann man denn einen Timeout setzen?
     
Die Seite wird geladen...
Ähnliche Themen - Sicherheitscheck Benutzerauthentifizierung
  1. Jaenis
    Antworten:
    2
    Aufrufe:
    461

Diese Seite empfehlen