Ist mein Loginscript sicher?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Ist mein Loginscript sicher?

    Hallo liebe Leute,

    ich habe ein kleines Loginscript für meine Seite geschrieben.
    Jedoch frage ich mich jetzt, ob es auf diese Art und Weise wirklich sicher ist.
    Es wäre echt cool, wenn Ihr mal schnell drüber fliegen könntet und mir vielleicht noch einige Tips/Verbesserungsvorschläge gebt.

    Für das Script benutze ich in der Datenbank('test') eine Tabelle 'users' welche die Spalten: 'ID' 'Name' 'Passwort' beinhaltet.

    Der code der Loginseite (test.php) sieht so aus:
    PHP-Code:
    <?php
        error_reporting
    (E_ALL);
            
        
    define('MYSQL_HOST',     'localhost');
        
    define('MYSQL_USER',     'root');
        
    define('MYSQL_PASS',     '');
        
    define('MYSQL_DATABASE''test');
        
        @
    mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die(mysql_error()."\n");
        
    mysql_select_db(MYSQL_DATABASE) OR die("Datenbank nicht ausgewählt:<br />=> ".mysql_error()."\n");

        
    //F U N K T I O N E S D E F I N I T I O N E N  -  S T A R T    

        
    function array_stripslashes(&$var)
        {
            if(
    is_string($var)) {
                
    $var stripslashes($var);
            } else {
                if(
    is_array($var)) {
                    foreach(
    $var AS $key => $value) {
                        
    array_stripslashes($var[$key]);
                    }
                }
            }
        }
        
        function 
    login($name$pass)
        {
            
    $sql "SELECT
                        Password
                    FROM
                        users
                    WHERE
                        Name = '"
    .$name."';";
            
    $result mysql_query($sql) OR die(mysql_error());
            
    $row mysql_fetch_assoc($result);
            
    mysql_free_result($result);
            if(
    $pass != "" AND md5($pass) == $row['Password']){
                return 
    true;
            }else{
                return 
    false;
            }
        }
    //F U N K T I O N E S D E F I N I T I O N E N  -  E N D E


        
    if(isset($_GET['section']) AND ("admin" == $_GET['section'])) {
            
    session_start();
            if(!isset(
    $_SESSION['IP'])) {
                
    $_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
            }
            if(
    $_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
                die(
    "Sie dürfen keine Sessions von anderen Usern verwenden!!!"); 
            }
        }

        if(
    get_magic_quotes_gpc()) {
            
    array_stripslashes($_GET);
            
    array_stripslashes($_POST);
            
    array_stripslashes($_COOKIE);
        }

        if(isset(
    $_GET['action']) AND ("logout" == $_GET['action'])){ 
            unset(
    $_SESSION['ID']);
            unset(
    $_SESSION['IP']);
            
    session_destroy();
            echo 
    "Ausgeloggt";
            echo 
    "</p>\n";
            echo 
    "<a href=\"test.php?section=admin\">Einloggen</a><br />\n";
        } else {
            if(isset(
    $_POST['UserID']) AND "" == $_POST['UserID']) {
                echo 
    "<p>\n";
                echo 
    "    Bitte geben Sie einen Benutzernamen ein.\n";
                echo 
    "</p>\n";
                echo 
    "<a href=\"test.php?section=admin\">Einloggen</a><br />\n";
            } else {        
                if(isset(
    $_POST['UserID'], $_POST['Password'])){
                        if(
    login(addslashes($_POST['UserID']), addslashes($_POST['Password']))){
                            
    $_SESSION['ID'] = $_POST['UserID'];
                        }
                } 

                if(isset(
    $_SESSION['ID'])) {
                    echo 
    "<p>\n";
                    echo 
    "Willkommen im Adminbereich <br />\n";
                    echo 
    "    <a href=\"test.php?section=admin&amp;action=logout&amp;".SID."\">Ausloggen</a><bt />\n";
                    echo 
    "</p>\n";
                } else {
                    if(isset(
    $_POST['submit'])) {
                         echo 
    "<p>\n";
                         echo 
    "    Ungültiges Password.\n";
                         echo 
    "</p>\n";
                         
                    }
                    echo 
    "<form action=\"test.php?section=admin\" method=\"post\" class=\"formular\">\n";
                    echo 
    "    <p>\n";
                    echo 
    "        Adminbereich\n";
                    echo 
    "    </p>\n";
                    echo 
    "<input type=\"text\" size=\"10\" name=\"UserID\" id=\"name\">\n<br />";
                    echo 
    "<input size=\"10\" type=\"password\" name=\"Password\" id=\"password\" />\n<br />";
                    echo 
    "<input type=\"submit\" name=\"submit\" value=\"Login\" />\n";
                    echo 
    "</form>\n";
                }
            }
        }

    ?>
    Ich bin für jede Hilfe dankbar.

    Gruß saio
    Zuletzt geändert von saio; 20.03.2007, 20:10.

  • #2
    PHP-Code:
    Name '".$id."';"; 
    sorry raff ich nich ... WENN name gleich ID ist o_O? vielleicht liegts auch daran das ich mein gehirn grad runter gefahrn habe ...

    *edit*
    beim genaueren hinschauen verstehe ich hier vieles nicht

    mfg
    bugbuster
    Zuletzt geändert von Bugbuster; 20.03.2007, 18:42.
    tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
    documentation: php.net mysql.com framework.zend.com

    Die Nachtwache!

    Kommentar


    • #3
      so hab bissl was abgeändert...

      so wie es jetzt da steht läufts bei mir einwandfrei...

      $_POST['UserId'] wird an $name übergeben ;-)
      Zuletzt geändert von saio; 20.03.2007, 19:02.

      Kommentar


      • #4
        such mal bei google oder hier nach "mysql injection".
        Für Rechtschreibfehler übernehme ich keine Haftung!

        Kommentar


        • #5
          joo hab jetzt folgende Funktionen zum Thema mysql injection gefunden:

          -> mysql_real_escape_string()

          -> strip_tags()

          -> htmlspecialchars()

          Jedoch frag ich mich wie ich diese im Bezug auf das Script anwenden soll und was sie mir wirklich nützen?

          Gruß

          Kommentar


          • #6
            Um den wert, der per Post in das SQL Statement kommt. Ist das Passwort nicht verschlüsselt in der DB,? Falls doch dann ist addslashes da nicht mehr nötig. Falls nicht, dann auf jedenfall MD% oder SHA1 verschlüseln
            Für Rechtschreibfehler übernehme ich keine Haftung!

            Kommentar


            • #7
              ... und Zahlen vorher mit z.B. intval bereinigen

              Kommentar


              • #8
                und mehr hast du nicht gefunden, nur eine funktionsliste?
                http://de3.php.net/manual/en/securit...-injection.php

                Kommentar


                • #9
                  @Damian1984: ja habs auch in der DB als md5-wert
                  @asp2php: welche werte soll ich denn genau bereinigen oder meinst du jetzt wenn sich ein user registriert?
                  @penizillin: ok da stehen die gefahren von mysql injection aber nicht wirklich ne bombensichere methode um sich davor zu schützen nur paar methoden wie => mysql_escape_string() , addslashes()

                  Zuerst besten Dank, mein Gehirn ist anscheinend irgendwie nicht in der Lage dies Funktion konkret in meinen Code zu implementieren.
                  Wäre echt nett wenn ihr die Verbessurngsvorschläge etwas deutlicher darstellt dann peil ich es vielleicht eher.

                  Beste Grüße...

                  Kommentar


                  • #10
                    Original geschrieben von saio

                    @asp2php: welche werte soll ich denn genau bereinigen oder meinst du jetzt wenn sich ein user registriert?
                    alle Werte, die vom Client kommt und kommen könnte

                    Kommentar


                    • #11
                      @asp2php:
                      Danke, hab jetzt alle Zahlenwerte int-konform gemacht bevor Sie auch nur in die Nähe einer SQL-Abfrage kommen...

                      Jetzt hätt ich mal noch ne Frage an alle Querdenker:


                      Wäre es rein theorethisch möglich, dass ein User den Wert eines Session-Arrays z.B:
                      PHP-Code:
                      $_SESSION['xxx'] = $_POST['Benutzername']; 
                      einfach durch ein form oder einen URL-Aufruf definiert, um dann damit in den Memberbereich zu kommen, welcher nur durch einen gesetzten Session-ID-Wert erreichbar wäre?
                      Zuletzt geändert von saio; 20.03.2007, 22:26.

                      Kommentar


                      • #12
                        Soweit ich weiß were das nur Möglich wenn ein fremdes Script includet wird.
                        Also durch einen Link wo eine fremdes script eingeschleust wird.(Menu.php?M=Clan.php)

                        Ansonsten sollte es nicht möglich sein an die Session variablen ranzukommen.

                        Mfg Splasch

                        Kommentar


                        • #13
                          Na gut, dann werd ich wohl den Sessions vertrauen müssen...

                          Bin gerne offen für weitere Kommentare...

                          ...ansonsten ein ganz dickes an alle Kommentatoren

                          Gruß saio

                          Kommentar


                          • #14
                            Falls ihr mal ein bisschen "Fehler" und "Sicherheitslücken" entdecken wollt: www.hackthissite.org

                            Das ist ein Browsergame, bei dem man entweder versuchen kann, gestellte Internetseiten zu hacken und zu berichtigen, oder man stellt seine eigenen Scripte her, um bestimmte Aufgaben zu erfüllen. Ist recht unterhaltsam und ab Level 5 auch schon ein bisschen schwerer

                            Ansonsten:
                            PHP-Code:
                            $_SESSION['xxx'] = $_POST['Benutzername']; 
                            dürfte schon ein Sicherheitsproblem darstellen, denn man kann sich eine eigene HTML-Seite bauen und auf deine "action=''" verweisen... Somit würde man doch in den Mitgliederbereich hineinkommen. Jedenfalls funktioniert das so auf einer Seite bei dem besagten Browsergame..

                            mfg nOe
                            "I am what I am and I do what I can..."
                            Meine HP -- Mein GPG-Key
                            Meine Projekte: WebStorage 2.0 -- easyAJAX-Chat 2.2.0 (beta)

                            Kommentar


                            • #15
                              nOe, lies doch mal im ersten post, wie und wo diese zeile vorkommt...

                              Kommentar

                              Lädt...
                              X