• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Login-Skript erstellt. Kann man dass noch kürzen ?

Hansii

Mitglied
Hallo.

Habe ein funktionierendes Login-Skript nach langer Zeit hinbekommen:

------

mysql_connect.php:

PHP:
<?php
mysql_connect("Localhost", "Benutzername", "Passwort") or die ("Verbindung konnte nicht hergestellt werden.");
mysql_select_db("Datenbank") or die ("Datenbank konnte nicht aufgerufen werden.");
?>


login.html:

HTML:
<!DOCTYPE html>
<html>
<head>
 <title>Login</title>
<head>
<body>
 <form action="login.php" method="post">
  <h1>Login</h1>
  Bitte loggen Sie sich ein: <br /><br />
  Benutzername: <input type="text" name="username" /><br />
  Passwort: <input type="password" name="pw" /><br /><br />
  <input type="submit" value="Login" />
 </form>
</body>
</html>


login.php:

PHP:
<?php
session_start();
include("mysql_connect.php");
$username = $_POST["username"];
$pw = md5($_POST["pw"]);

if($username == "" OR $pw == "")
   {
   echo "Bitte füllen Sie alle Felder aus. <a href=\"login.html\">Zurück</a>";
   exit;
   }
else
   {
   $abfrage = "SELECT username, pw FROM Benutzer WHERE username like '$username' LIMIT 1";
   $ergebnis = mysql_query($abfrage);
   $row = mysql_fetch_object($ergebnis);
   
   if($row->pw == $pw)
      {
      $_SESSION["username"] = $username;
      header("Location: inhalt.php");
      }
   else
      {
      echo "Das Passwort ist falsch. <a href=\"login.html\">Zurück</a>";
      }
   }
?>


inhalt.php:

PHP:
<?php
session_start();
if(isset($_SESSION["username"]))
   {
?>
<!DOCTYPE html>
<html>
<head>
 <title>Inhalt</title>
</head>
<body>
 <h1>Inhalt</h1>
 <h2>Guten Tag, <?php echo $_SESSION["username"]; ?></h2><br />
 <a href="logout.php">ausloggen</a>
</body>
</html>
<?php
   }
else
   {
   echo "Bitte erst <a href=\"login.html\">einloggen.</a>";
   }
?>


logout.php:

PHP:
<?php
session_start();
?>
<?php
$zerstören = session_destroy();
if($zerstören == true)
   {
   echo "Sie haben sich erfolgreich ausgeloggt. <a href=\"login.html\">Einloggen</a>";
   }
?>

------

Kann man diesen Code verkürzen? Wenn ja, wo und wie?

Danke
 
In login.php könntest du anstatt
PHP:
   if($row->pw == $pw)
      {
      $_SESSION["username"] = $username;
      header("Location: inhalt.php");
      }
   else
      {
      echo "Das Passwort ist falsch. <a href=\"login.html\">Zurück</a>";
      }
folgendes machen:
PHP:
   if($row->pw == $pw)
      {
      $_SESSION["username"] = $username;
      header("Location: inhalt.php");
      exit;
      }
      echo "Das Passwort ist falsch. <a href=\"login.html\">Zurück</a>";

Und
PHP:
 $zerstören = session_destroy();
if($zerstören == true)
   {
   echo "Sie haben sich erfolgreich ausgeloggt. <a href=\"login.html\">Einloggen</a>";
   }
zu
PHP:
if(session_destroy())
   echo "Sie haben sich erfolgreich ausgeloggt. <a href=\"login.html\">Einloggen</a>";

Aber ehrlich gesagt scheint mir dieses Script schon banal einfach. Wenn du noch mehr kürzt, wird das Script unsicher.
 
Danke. Ich meine nur, desto kürzer, desto übersichtlicher. Das Skript ist sehr einfach und "banal". Ist ja nur der Anfang...
 
dein code ist gefährlich für dich und alle beteiligten auf dem server ;)
es besteht die möglichkeit der sql injection und die mysql verbindung wird nicht geschlossen.

PHP:
 <?php
session_start();

$connection = mysql_connect("Localhost", "Benutzername", "Passwort") or die ("Verbindung konnte nicht hergestellt werden.");
mysql_select_db("Datenbank", $connection) or die ("Datenbank konnte nicht aufgerufen werden.");


$username = mysql_real_escape_string($_POST["username"],$connection);
$pw = md5($_POST["pw"]);

if($username == "" OR $pw == "")
{
    echo "Bitte füllen Sie alle Felder aus. <a href=\"login.html\">Zurück</a>";
    exit;
}
else
{
    $abfrage = "SELECT username, pw FROM Benutzer WHERE username = '$username' LIMIT 1";
    $ergebnis = mysql_query($abfrage, $connection);
    $row = mysql_fetch_object($ergebnis);

    if($row->pw == $pw)
    {
        $_SESSION["username"] = $username;
        header("Location: inhalt.php");
    }
    else
    {
        echo "Das Passwort ist falsch. <a href=\"login.html\">Zurück</a>";
    }
}

mysql_close($connection);
?>
 
ich würde dir raten das Passwort nicht mit md5() zu verschlüsseln.

Sondern mit hash("sha256", $pw);
oder mit hash("sha512", $pw);

Außerdem würde ich noch mit einem zufällig generierten Salt arbeiten!
 
dein code ist gefährlich für dich und alle beteiligten auf dem server ;)
es besteht die möglichkeit der sql injection und die mysql verbindung wird nicht geschlossen.

Die MySQL-Verbindung wird ohnehin am Ende des Scripts vom Garbage Collector automatisch gelöscht. Die Verbindung zu schließen, macht eigentlich nur dann Sinn, wenn das Script länger ist und es dadurch eine Performancesteigerung während der Ausführung verursacht. Ich würde sogar so weit gehen und behaupten, dass die manuelle Schließung in dem Fall performancelastiger ist, als wenn man es nicht machen würde (ich rede hier von 'ner Mikrosekunde ^^).


Und wie üblich hier, wurden wichtige Tipps nicht gegeben...

- Die mysql_*-Extension ist ab PHP5.5 veraltet! Daher solltest du, bevor es dafür zu spät ist, auf mysqli oder PDO umsteigen.
- Du machst keine Überprüfungen. Und zwar überprüfst du erst gar nicht, ob das Formular auch wirklich abgesendet wurde (Stichwort isset()). Und außerdem löst du noch einen Fehler aus, indem du nicht überprüfst, ob du überhaupt Daten von der Datenbank bekommst. Wenn du das error_reporting() hochschrauben würdest, würdest du einige Fehlermeldungen erhalten in diesen Fällen.

Noch 'ne Frage: Warum fetch_object()? fetch_assoc() gibt ein Array zurück mit dem du nativ viel mehr anstellen kannst als mit Objekten.
 
Zurück
Oben