Login mit Benutzersteuerung

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

  • Login mit Benutzersteuerung

    Hi@All

    Ich hab eine kleine Benutzerverwaltung geschrieben.
    Der Benutzer loggt sich mit Name und Passwort ein. Dann hat er die Möglichkeit über ein Eingabefeld seine Nachricht zu verfassen und in einer .txt zu speichern oder auch zu löschen.
    Nachfolgend mal mein Script. Schaut doch bitte mal drüber ob es etwas zu verbessern oder Sicherheitslücken gibt.
    Bisher läuft alles wie gewünscht.

    die Loginseite:
    PHP-Code:
    <?
    // neue Session starten
    session_start();

    // datenbankverbindung 
    include("url");

    // variablen initialisieren
    $table = "db_tabelle";
    $meldung = "";

    $query = mysql_query("SELECT benutzer,id FROM $table");

             // Login überprüfen
            if(isset($_POST['login'])){
            
              $benutzer= strip_tags($_POST['benutzer']); 
              $pass = strip_tags($_POST['pass']);
              
              $query2 = mysql_query("SELECT pass, benutzer FROM $table WHERE benutzer='".$benutzer."'");
              $ausgabe = mysql_fetch_array($query2);
              
              // Passwort vergleichen mit Passwort aus DB
              if((md5($pass) == $ausgabe['pass']) && $benutzer == $ausgabe['benutzer']){
              
                $_SESSION['status'] = 1;
                $_SESSION['benutzer'] = $benutzer;
                // datei zum schreiben öffnen
                // wenn nicht vorhanden, wird sie angelegt
                $filename = "url/news_".strtolower(str_replace(" ","",$_POST['benutzer'])).".txt";
                $handle = fopen($filename,"a+");
                header("Location: url?benutzer=$benutzer");
                            
                }else{
                $meldung = "Falsches Passwort oder falscher Benutzername! Bitte versuchen Sie es erneut!";
                }
              
              }
              
    ?>
    die Verwaltungsseite:
    PHP-Code:
    session_start();

    // Session abmelden
    if(isset($_POST['destroy'])){
       
    $_SESSION = array();
       
       if (isset(
    $_COOKIE[session_name()])) {
          
    setcookie(session_name(), ''time()-42000'/');
          }
     
       
    session_destroy();
       
    header("Location: url");

       exit();
       }
                 

    if((
    $_SESSION['status'] != 1) || ($_SESSION['benutzer'] != $_GET['benutzer'])){
      
    header("Location: url?login=fehler");
     
      }

    // Variable definieren
    $filename "url/news_".strtolower(str_replace(" ","",$_GET['benutzer'])).".txt"
    $meldung "";

    if(isset(
    $_POST['senden'])){

        
    // newstext in Variable packen
        
    $content $_POST['newstext'];
        
        
    // alle Zeilenumbrüche entfernen und durch +++ ersetzen
        
    $content str_replace(array("\r\n","\n","\r")," +++ ",$content);
        
    $content ereg_replace("[ +++ ]{2,}"," +++ ",$content);
        
        
    // Sichergehen, dass die Datei existiert und beschreibbar ist
        
    if (is_writable($filename)) {
        
            
    // $filename im  Screibmodus öffnen
            
    if (!$handle fopen($filename"w")) {
                 print 
    "Kann die Datei $filename nicht öffnen";
                 exit;
            }
        
            
    // Schreibe $content in die geöffnete Datei.
            
    if (!fwrite($handle$content)) {
                
    $meldung "Ihre News wurden <b>nicht</b> geändert!";
            }
        
            
    $meldung "Ihre News wurden ge&auml;ndert!";
        
            
    fclose($handle);
        
        } else {
            
    $meldung =  "&raquo;Ihre News wurden <b>nicht</b> geändert!&laquo;";
        }
        
    }

    // inhalt der .txt löschen
    if(isset($_POST['loeschen'])){
      
    // Variable Content leeren
      
    $content "";
      
      if(
    is_writable($filename)){
        
        
    //$fiename im Schreibmodus öffnen
        
    if(!$handle fopen($filename,"w")){
          print 
    "kann Datei $filename nicht öffnen!";
          exit();
          }
          
        
    // $content in geöffnete Datei schreiben
        
    if(!fwrite($handle$content)){
          
    $meldung =  "Ihre News wurden nicht gelöscht!";
          }
          
         
    $meldung "Ihre News wurden gelöscht!";
         
         
    fclose($handle);
        }
      
      }
    ?> 
    Schon mal Danke im Voraus.
    Zuletzt geändert von gruenspan; 17.03.2007, 17:16.

  • #2
    Re: Login mit Benutzersteuerung

    PHP-Code:
    <?
    // neue Session starten
    session_start();

    // datenbankverbindung 
    // Gibt es wirklich eine Datei namens "url" oder verwendest du hier 
    // eigentlich eine URL (http://example.com/file.inc.php)? Dann hängt dein
    // Script nämlich von allow_url_fopen ab, was zudem noch unnütz ist, wenn
    // example.com der eigene Host ist.
    include("url");

    // variablen initialisieren
    $table = "db_tabelle";
    $meldung = "";

    // Wozu das? Langweilt sich dein DB-Server?
    $query = mysql_query("SELECT benutzer,id FROM $table");

    // Login überprüfen
    if(isset($_POST['login'])){

        // Hier solltest du unbedingt mysql_real_escape_string() verwenden!
        $benutzer= strip_tags($_POST['benutzer']); 
        $pass = strip_tags($_POST['pass']);

        // Diese Query ...
        $query2 = mysql_query("SELECT pass, benutzer FROM $table WHERE benutzer='".$benutzer."'");
        $ausgabe = mysql_fetch_array($query2);
              
        // ... und dann dieser Vergleich ...
        if((md5($pass) == $ausgabe['pass']) && $benutzer == $ausgabe['benutzer']){

            // ... wären so besser gelöst: 
            // "SELECT benutzer FROM $table WHERE benutzer = '$benutzer' AND pass = MD5('$pass')"
            
            // Wozu status speichern? Das Vorhandensein von benutzer impliziert doch status. 
            $_SESSION['status'] = 1;
            $_SESSION['benutzer'] = $benutzer;

            // datei zum schreiben öffnen
            // wenn nicht vorhanden, wird sie angelegt
            // Hier wiederum die (sinnlose) Abhängigkeit von allow_url_fopen, s.o.
            $filename = "url/news_".strtolower(str_replace(" ","",$_POST['benutzer'])).".txt";
            // Und wozu öffnest du eine Datei, wenn du sie dann weder liest noch beschreibst?!?
                $handle = fopen($filename,"a+");
            header("Location: url?benutzer=$benutzer");
            // Nach einem Location-Header gehört meist ein exit;.

        }else{
            // Warum setzt du eine Variable mit einer Meldung für den Benutzer, 
            // gibst sie ihm dann aber nicht aus?
            $meldung = "Falsches Passwort oder falscher Benutzername! Bitte versuchen Sie es erneut!";
        }
    }  
    ?>
    PHP-Code:
    session_start();

    // Session abmelden
    if(isset($_POST['destroy'])){
       
    $_SESSION = array();
       
       if (isset(
    $_COOKIE[session_name()])) {
          
    setcookie(session_name(), ''time()-42000'/');
          }
     
       
    session_destroy();
       
    header("Location: url");

       exit();
       }
                 
    // Wenn benutzer gesetzt ist, ist status auch immer gesetzt und immer 1. Weg damit.
    // GET-Variablen sind u.U. encoded, z.B. wenn der Benutzer Jörg heißt. Hast du daran gedacht?
    if(($_SESSION['status'] != 1) && ($_SESSION['benutzer'] != $_GET['benutzer'])){
        
    header("Location: url?login=fehler");
        
    // Hier fehlt definitiv ein exit;.
    }

    // Variable definieren
    // Wo verhinderst du Benutzernamen wie "/../../../etc/passwd"?
    // (Blödes Beispiel, aber man weiß was ich meine.)
    $filename "url/news_".strtolower(str_replace(" ","",$_GET['benutzer'])).".txt"

    // Der Rest ist soweit okay.
    ?> 
    Unter Benutzerverwaltung verstehe ich übrigens etwas anderes.
    Zuletzt geändert von onemorenerd; 17.03.2007, 17:37.

    Kommentar


    • #3
      Unter Benutzerverwaltung verstehe ich übrigens etwas anderes.
      Is wohl etwas überzogen ausgedrückt. Ich meinte damit, das jeder benutzer seine eigene .txt beschreiben oder löschen kann. mehr nicht.

      Gibt es wirklich eine Datei namens "url" oder verwendest du hier eigentlich eine URL (http://example.com/file.inc.php)?
      Hab hier im Forum nur alle meine tatsächlichen URL's durch 'url' ersetzt.

      Sonst vielen Dank für die Tipps onemorenerd. Werd mich dran machen und sie umsetzen.

      Kommentar

      Lädt...
      X