Adminbereich - Sicherheit

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Adminbereich - Sicherheit

    Hallo,
    da ich momentan an einem Admin- bzw. Teambereich schreibe und ich mich nocht nicht größer mit Sicherheitsfragen beschäftigt. Ich beschreib einfach mal das Konzept und irgendjemand schreit, wenn was fehlt oder falsch ist.

    Ich habe einen Admin-Ordner, der folgenden Aufbau hat:
    --admin\
    .....index.php
    .....ticket.php
    .....support.php
    .....data\
    ..........defines.php
    ..........class.php

    Auf der index.php befindet sich das Login-System. Eingabe ist der Username, Passwort, Passwortbestätigung und natürlich Captcha, um Bots zu verhindern. Wenn man sich erfolgreich eingeloggt hat, werden 3 Session gesetzt. Session 1: Name, Session 2: Passwort-hash, 3: eingeloggt true;. Bei jeder anderen Datei, die man im Adminbereich aufruft, wird überprüft, ob der User eingeloggt istm ob Name und Passwort stimmen und ob der User überhaupt die nötigen Rechte, die aus einem binären Rechtesystem ausgelesen werden, hat die Seite zu sehen. Wenn dies nicht der Fall ist, wird der User über 'header('location: index.php')' auf die Login-Seite zurückgeleitet. Nach jeder Aktion, wie zum Beispiel User löschen, umbennen, bannen wird nochmals nach dem Passwort, dem Username und einem 'Aktionscode' gefragt. Der Aktionscode ist nochmals ein Passwort für die jeweilige Aktion, das jedoch für jedes Teammitglied gleich ist. Die jeweilige Auswertungen der Formulare mache ich im Affenformularstil.



    Fällt euch irgendwas auf, was ich anders machen sollte oder ob ich etwas wichtiges vergessen habe? Vielen Dank ;)
  • Mit Sicherheit hat das ganze was du beschreibst wenig bis garnix zu tun.
    Weiters were es mir neue das man für eine Sitzungen 3 Session erstellen kann. Was ja auch sinlos ist wenn es möglich sein sollte.
    Ganz schlecht ist es das Password in der Session zu Speichern. Hier verringerst du nur die Sicherheit als es sicherer zu machen. (Du bewirkst damit genau das Gegenteil)

    Sicherheit erreichst du wenn du dich gegen die verschiedenen Angriff Methoden Schützt (Cross-Site (XSS), Sql injection, Brute Force, Session-Hijacking,XSRF / CSRF , und so weiter)

    Mfg Splasch
  • @splasch: Ich meinte 3 Sessions im SInne von $_SESSION['a'], $_SESSION['b'], $_SESSION['c']


    Vielen Dank für ihr eure Antworten!

    Captcha hab ich eingebaut und die CSRF-Abwehr eingebaut. SQL-Injection sind automatisch in meiner MySQL-Klasse mit drin. Aber wie kann ich gegen Session-Hijacking vorgehen?

    Ich hab auf stackoverflow noch folgendes gefunden... ist das sinnvoll?

    Quellcode

    1. ini_set('session.use_cookies', 1);
    2. ini_set('session.use_only_cookies', 1);
    3. ini_set('session.use_trans_sid', 0);
  • Session-Hijacking: IP-Adresse des Computers bei Ausstellung der Session mit der IP vergleichen, die die Session aktuell verwendet. Also einfach beim Login in $_SESSION die IP speichern und dann überprüfen.

    Hier im Forum ist das ziemlich lustig, wenn man sich von jemandem die SID kopiert, die im Link enthalten ist. Da ist man direkt als wer anders eingeloggt :) Da hat Woltlab irgendwie gefailt..
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blockierte Grafik: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Jan Thurau ()

  • Jan Thurau schrieb:

    Hier im Forum ist das ziemlich lustig, wenn man sich von jemandem die SID kopiert, die im Link enthalten ist. Da ist man direkt als wer anders eingeloggt :) Da hat Woltlab irgendwie gefailt..


    Nicht nur Woltlab, auch phpbb u. ä.
    Deshalb bin ich prinzipiel gegen Angaben in der Url, die nicht notwendig sind, um die richtige Seite anzuzeigen, weil da der User einer Stelle mehr zum Manipulieren hat
  • Okey, jetzt hab ich noch ein wenig dran rumgebaut.... ich hoffe jetzt ist es besser :D
    BItte nochmal schreen, wenn was nicht passt ;)

    index.php

    Quellcode

    1. <?php
    2. if($_SERVER['REQUEST_METHOD'] == 'POST')
    3. {
    4. session_start();
    5. session_regenerate_id();
    6. $_SESSION[sha1('fingerprint')] = md5($_SERVER['HTTP_USER_AGENT'].sha1('RANDOM string'));
    7. if(!isset($_SESSION[sha1('csrf')]) || $_SESSION[sha1('csrf')] !== $_POST['csrf'])
    8. {
    9. $_SESSION[sha1('ip')] = $_SERVER['REMOTE_ADDR'];
    10. //Logindaten-Auswertung
    11. }
    12. }
    13. //CSRF Protection
    14. $key = sha1(microtime());
    15. $_SESSION[sha1('csrf')] = $key;
    16. //Weiter Unten HTML-Loginscreen ;)
    17. ?>
    Alles anzeigen



    ticket.php

    Quellcode

    1. <?php
    2. if($_SERVER['REQUEST_METHOD'] == 'POST')
    3. {
    4. ini_set('session.use_cookies', 1);
    5. ini_set('session.use_only_cookies', 1);
    6. ini_set('session.use_trans_sid', 0);
    7. session_start();
    8. session_regenerate_id();
    9. if ($_SESSION[sha1('fingerprint')] != md5($_SERVER['HTTP_USER_AGENT'].sha1('RANDOM string')))
    10. {
    11. session_destroy();
    12. header('Location: index.php');
    13. exit();
    14. }
    15. //prüfen, ob CSRF-Angriff vorliegt
    16. if(!isset($_SESSION[sha1('csrf')]) || $_SESSION[sha1('csrf')] !== $_POST['csrf'])
    17. {
    18. //Ticketauswertung
    19. }
    20. }
    21. ?>
    Alles anzeigen