Sicherheitscheck | Benutzerauthentifizierung

S

sevY

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
 
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
 
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
 
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
 
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?)
 
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.
 
mikne21 schrieb:
...
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.
Wie kann man denn einen Timeout setzen?
 
Zurück
Oben Unten