tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1106
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jun 2004
    Ort
    (RLP)
    Beiträge
    193
    Hallo,

    Ich wollte jetzt mal anfangen meine komplette Seite sicherer zu machen. Ein Bekannter, der Informatik studiert hat meine Seite wohl mit einem Linux-Scanner geprüft und mir gesagt das mein Login-Script eine große Sicherheitslücke aufweißt ... da Er momentan überhaupt keine Zeit hat wegen Klausuren ect. dachte ich poste ich mal mein Login (welcher bereits deaktiviert ist) Und bitte die Cracks unter euch mir mal Hilfestellung zu geben.

    PHP-Code:
    function login($refresh)
    {

      if(isset (
    $_POST['c_nick']) AND ($_POST['c_pw']))
      {
      
    $query mysql_query("SELECT * FROM profile WHERE nick = '".$_POST['c_nick']."'");
      
    $ask mysql_fetch_array($query);

        if(
    $ask['nick'] == $_POST['c_nick'])
        {
                 if(
    $ask['pass'] == $_POST['c_pw'])
                 {
                      
    setcookie("login_user",$_POST['c_nick'],time()+1800,"/");
                      echo 
    '<div class="size1">Sie werden eingelogt!...</div><meta http-equiv="refresh" content="1; URL=index.php?content='.$refresh.'">';
                 }
             else
             {
               echo 
    '<div class="size1">Passwort falsch!</div>';
             }
        }
        else
        {
          echo 
    '<div class="size1">Benutzername falsch!</div>'
        }
      }

    Danke vorweg Chris
     
    Wer sichere Schritte tun will, muss sie langsam tun.

    ~Goethe

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Mein Vorschlag:
    PHP-Code:
    function login$login$pass )
    {

        
    $query '
            SELECT
                    1
              FROM
                    `profile`
              WHERE
                    `nick` = "'
    .mysql_real_escape_string($login).'"
                AND `pass` = "'
    .mysql_real_escape_string($pass).'"
            '
    ;
        
    $result mysql_query($query);
        if( 
    mysql_num_rows($result) === ) {
            return 
    setcookie('login_user'$logintime()+1800'/');
        }

        return 
    false;

    }


    if( isset(
    $_POST['c_nick']) && isset($_POST['c_pw']) ) {
        if( 
    login($_POST['c_nick'], $_POST['c_pw']) ) {
            echo 
    'Sie sind nun eingeloggt.';
        } else {
            echo 
    'Benutzername und/oder Passwort sind falsch.';
        }
    } else {
        echo 
    'Bitte geben Sie Benutzernamen und Passwort ein.';

     
    Markus Wulftange

  3. #3
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo Chris,
    1. Zeile 4 müsste wohl so lauten:
      PHP-Code:
      if(isset ($_POST['c_nick']) AND isset($_POST['c_pw'])) 
    2. Zeile 6:
      Grundregel: Von außerhalb kommende Daten (vor allem aber Benutzereingaben) sind grundsätzlich böse! Das heißt, man muss darauf vorbereitet sein, dass diese Daten alles enthalten, nur nur nicht das, was man erwartet. Deshalb niemals Einträge aus $_POST, $_GET etc. ungefiltert in eine Datenbankabfrage einbinden. Wenn es sich um einen String handelt, sollte man vorher mysql_real_escape_string() drüberlaufen lassen, bei Ganzzahlen hilft beispielsweise intval().
      So sollte die Zeile dann aussehen:
      PHP-Code:
        $query mysql_query("SELECT * FROM profile WHERE nick = '".mysql_real_escape_string($_POST['c_nick'])."'"); 
      In deinem Fall geht zwar keine größere Gefahr von der fehlenden Filterung aus (soweit ich das sehen kann), aber man sollte es sich trotzdem angewöhnen.
    3. Zeile 11:
      Passwörter sollte man schon allein aus Datenschutzgründen nicht im Klartext in der Datenbank speichern. Meist wird hier stattdessen ein Hashwert wie beispielsweise MD5 verwendet.
    4. Zeile 13:
      Authentifizierst du den Benutzer wirklich nur über dieses Cookie? Damit steht es jedem frei, das Cookie auf seinem Rechner zu verändern und sich damit ohne Passwortabfrage als jeder beliebige User auszugeben. Da müsstest du dir was anderes überlegen (z.B. Sessions).
    5. Zeile 18:
      Es empfiehlt sich eigentlich nicht, gesondert auf ein falsches Passwort hinzuweisen. Dadurch wird es jemanden, der nach gültigen Zugangsdaten sucht, nämlich leichter gemacht (er kann erst mal nach einen gültigen Benutzernamen suchen und dann nach dem passenden Passwort).

    So, das war's erst mal. Hab jetzt nicht alles ganz detailliert beschrieben, darum einfach nachfragen, wo weiter Informationsbedarf besteht.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  4. #4
    Registriert seit
    Jun 2004
    Ort
    (RLP)
    Beiträge
    193
    Jo Thx, hatte eben auch ein Tuti gefunden...

    Noch eine Sache zu md5... Das bringt nicht wirklich viel da das PW von Host aus unverschlüsselt gesendet wird... Wie du schon selbst sagtest da gehts wohl mehr um Datenschutz.
     
    Wer sichere Schritte tun will, muss sie langsam tun.

    ~Goethe

  5. #5
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    du kannst bei Bedarf auch clientseitig vor dem Versenden den MD5-Hash bilden und dann diesen abschicken (z.B. mit JavaScript). Oder du setzt gleich auf HTTPS.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  6. #6
    Registriert seit
    Jun 2004
    Ort
    (RLP)
    Beiträge
    193
    Hm, ok soweit habe ich jetzt nicht gedacht aber was anders... Gumbo hat wie ich finde ein sehr gutes Script gepostet was ich teilweise übernehmen werde danke an dieser stelle an Gumbo ebenso dank dir Matthias! Noch was zu Cookies wie könnte ich die denn sicherer machen so das der User keinen wirklichen Erfolg mit ändern des Cookies erziehlen würde?
     
    Wer sichere Schritte tun will, muss sie langsam tun.

    ~Goethe

  7. #7
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    wie gesagt: Sessions wären eine passende Lösung.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

Ähnliche Themen

  1. Mysql sicher machen!
    Von Nerlich im Forum PHP
    Antworten: 3
    Letzter Beitrag: 09.02.08, 15:25
  2. .Net Remoting sicher machen
    Von MariusMeuser im Forum .NET Web und Kommunikation
    Antworten: 3
    Letzter Beitrag: 18.08.07, 19:42
  3. Gästebuch sicher machen!
    Von Seven Secrets im Forum PHP
    Antworten: 4
    Letzter Beitrag: 19.01.06, 04:25
  4. Usereingabe sicher machen
    Von chaosente im Forum PHP
    Antworten: 4
    Letzter Beitrag: 20.10.05, 22:24
  5. Eintrittskarten sicher machen
    Von -exr- im Forum Creative Lounge
    Antworten: 8
    Letzter Beitrag: 14.02.05, 15:58