kostenloser Webspace werbefrei: lima-city


Problem mit Loginscript

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    Hallo !

    Ich programmiere derzeit einen Adminbereich für meine Seite. Beim Loginsystem tritt allerdings ein Fehler auf.
    Ich habe schon nach dem Fehler gesucht, auch schon mit Google, aber ohne Erfolg. Vielleicht könnt Ihr mir ja helfen.

    Meine login.php

    <?php
    if(!isset($_POST['name']) || $_POST['name'] == ""){
        header ("Location: index.html?fehler=1");
    }
    else
    {
    // Session starten 
    session_start (); 
    include ("../sql.php");   
    
    $pass = $_POST['name'];
        
    $sql = "SELECT ".  
        " * ".  
      "FROM ".  
        "benutzerdaten ".  
      "WHERE ".  
        "(Nickname = '".$pass."') AND ".  
        "(Kennwort = '".md5($_REQUEST["pwd"])."')";  
    $result = mysql_query ($sql);  
    if (mysql_num_rows ($result) > 0)  
    {  
      // Benutzerdaten in ein Array auslesen.  
      $data = mysql_fetch_array ($result);   
    
      // Sessionvariablen erstellen und registrieren  
      $_SESSION["user_id"] = $data["Id"];  
      $_SESSION["username"] = $data["Nickname"];
      $_SESSION["user_pw"] = $data["Kennwort"];    
      header ("Location: start.php");  
    }  
    else  
    {  
      header ("Location: index.html?fehler=1");  
    } 
    }
    ?>


    die Logout.php

    <?php  
    // Wird ausgeführt um mit der Ausgabe des Headers zu warten.  
    ob_start ();  
    
    session_start ();  
    session_unset ();  
    session_destroy ();  
    
    header ("Location: index.html");  
    ob_end_flush ();
    ?>


    die checkuser.php, die in jede Unterseite eingebunden wird:

    <?php
    session_start ();
    
    if (!isset ($_SESSION["username"]))  
    {  
      header ("Location: index.html");
    }  
    ?>


    die Seite nach dem Login:

    <?php
    include ("checkuser.php");
    ?>
    <html>
    	<head>
    <meta http-equiv='Content-Language' content='de'>
    <meta http-equiv='Content-Type' content='text/html; charset=windows-1252'>
    		<title>Adminbereich</title>
    	<link href="default.css" rel="stylesheet" type="text/css">
    	</head>
    
    <body>
    <div id="container">
      <div id="main">
        <div id="head">
          <div id="logo">
          </div>
        </div>
        <div id="body">
    
          <div id="column">
    
    <div id="menu3">
    
    </div>
    
          </div>
          <div id="content"><div id="page">
      
      <h1>Startseite</h1>
      <div class="content" id="pageDescription"><p></p>
    
    Willkommen im Adminbereich!
    
    
    </div>
    	</div>
    		</div>
    			</div>
    			<div id="footer"></div>
    				</div></div>
    
    </body>
    </html>


    Die Fehlermeldung, die nach dem Login kommt, ist diese:

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web48/html/demo/start.php:1) in /home/www/web48/html/demo/checkuser.php on line 2

    Beitrag zuletzt geändert: 25.11.2011 19:45:00 von davy
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Die Seite nach dem Login soll wohl deine start.php Seite sein?

    Wenn in deiner Login keine Session besteht wird eine Session gestartet und an einen header übergeben... In der Checkuser wird die Session nochmal gestartet und wieder an den header übergeben... Kannst du testweise mal das include der checkuser php aus der start.php entfernen und schauen was passiert?


    Außerdem fehlt dir etwas wichtiges!

    error_reporting(E_ALL)

    davy schrieb:
    Die Fehlermeldung, die nach dem Login kommt, ist diese:

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web48/html/demo/start.php:1) in /home/www/web48/html/demo/checkuser.php on line 2


    Beitrag zuletzt geändert: 24.11.2011 21:22:05 von kill-a-teddy
  4. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    Die Seite nach dem Login soll wohl deine start.php Seite sein?

    Wenn in deiner Login keine Session besteht wird eine Session gestartet und an einen header übergeben... In der Checkuser wird die Session nochmal gestartet und wieder an den header übergeben... Kannst du testweise mal das include der checkuser php aus der start.php entfernen und schauen was passiert?


    Außerdem fehlt dir etwas wichtiges!

    error_reporting(E_ALL)

    davy schrieb:
    Die Fehlermeldung, die nach dem Login kommt, ist diese:

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web48/html/demo/start.php:1) in /home/www/web48/html/demo/checkuser.php on line 2


    Hi!

    Ja, die Start.php ist die Datei, die nach dem Login kommt.

    Das Error Reporting habe ich in die start.php eingefügt und das include aus der start.php entfernt, wobei diese Datei ja bewirken soll, das geprüft wird, ob eine Session da ist.
  5. davy schrieb:
    kill-a-teddy schrieb:
    Die Seite nach dem Login soll wohl deine start.php Seite sein?

    Wenn in deiner Login keine Session besteht wird eine Session gestartet und an einen header übergeben... In der Checkuser wird die Session nochmal gestartet und wieder an den header übergeben... Kannst du testweise mal das include der checkuser php aus der start.php entfernen und schauen was passiert?


    Außerdem fehlt dir etwas wichtiges!

    error_reporting(E_ALL)

    davy schrieb:
    Die Fehlermeldung, die nach dem Login kommt, ist diese:

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web48/html/demo/start.php:1) in /home/www/web48/html/demo/checkuser.php on line 2


    Hi!

    Ja, die Start.php ist die Datei, die nach dem Login kommt.

    Das Error Reporting habe ich in die start.php eingefügt und das include aus der start.php entfernt, wobei diese Datei ja bewirken soll, das geprüft wird, ob eine Session da ist.


    Bekommst du denn ohne den include noch die Fehlermeldung?
    // EDIT: Hab selbst schon geschaut, die Fehlermeldung ist weg... Ich mach gleich noch mal einen Edit mom...

    Ändere mal
    <?php
    session_start ();
    
    if (!isset ($_SESSION["username"]))  
    {  
      header ("Location: index.html");
    }  
    ?>

    In:

    <?php
    session_start ();
    
    if (!isset ($_SESSION["username"]))  
    {  
     echo 'Falscher Benutzername oder falsches Passwort, klicke <a href="index.html"> Hier</a> um zur Startseite zurück zu kehren';
    }  
    ?>


    Das sollte auch funktionieren, du kannst dann ja noch nen Timer einbauen und den Text ändern z.B. "wenn du in x sekunden nicht weitergeleitet wirst, klicke bitte hier"

    Beitrag zuletzt geändert: 24.11.2011 22:08:08 von kill-a-teddy
  6. $sql = "SELECT ".  
        " * ".  
      "FROM ".  
        "benutzerdaten ".  
      "WHERE ".  
        "(Nickname = '".$pass."') AND ".  
        "(Kennwort = '".md5($_REQUEST["pwd"])."')";


    Da würde ich noch bisschen was ändern. Denn so ist es ganz einfach eine MySQL-Injection durchzuführen ;)
    Du musst den Nickname auf Zeichen wie z.b. ' überprüfen, diese sollten in der Eingabe des Users nicht enthalten sein.
  7. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    the-8-beta schrieb:
    $sql = "SELECT ".  
        " * ".  
      "FROM ".  
        "benutzerdaten ".  
      "WHERE ".  
        "(Nickname = '".$pass."') AND ".  
        "(Kennwort = '".md5($_REQUEST["pwd"])."')";


    Da würde ich noch bisschen was ändern. Denn so ist es ganz einfach eine MySQL-Injection durchzuführen ;)
    Du musst den Nickname auf Zeichen wie z.b. ' überprüfen, diese sollten in der Eingabe des Users nicht enthalten sein.


    Was kann ich denn ändern, damit mein Code sicherer wird?
  8. Mit mysql_real_escape_string.
  9. wen du "nur" das Problem mit der session hast
    würde ich mal überprüfen ob du vor dem start
    der session schon einen text ausgegeben hast
  10. Wenn die checkuser.php in jede Seite eingebunden wird, musst du session_start() in den entsprechenden Dateien entfernen. Schließlich startest du 2x eine Session, was unnötig ist bzw. nicht gehen wird.

    Im Übrigen Sessions und Header wenn Möglich immer direkt nach <?php

    Beitrag zuletzt geändert: 26.11.2011 11:31:29 von fabo
  11. anti-atomkraft

    Kostenloser Webspace von anti-atomkraft

    anti-atomkraft hat kostenlosen Webspace.

    mathehefter schrieb:
    wen du "nur" das Problem mit der session hast
    würde ich mal überprüfen ob du vor dem start
    der session schon einen text ausgegeben hast

    Bei einer utf8-Codierung zählt das BOM übrigens auch als solches... Am besten als iso-8859-1 abspeichern.
  12. b*******s

    schau mal ob du nicht ; oder schreibgfehler hast sonst bin ich ratlos !
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!