• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Mein Login script! gut? sicher? besser?

mmp5

Member
Hier habe ich ein Loginscript erstellt, welches aus einer 2 Tabellen Datenbank (user, password) einen login gewährt:
Code:
function check_login($user, $pass) 
{
include ("connectDB.inc.php");

$abfrage = mysql_query ("SELECT * FROM login WHERE user = '$user'");
$anzahl = mysql_num_rows($abfrage);
if ($anzahl <= 0) 
{
echo "Unbekannter Benutzername!";
}
else 
{
  while ($row = mysql_fetch_object ($abfrage)) 
{
    if ($row->password==$pass) 
{
        return true;
}
else           
{
return false;
}
}
}
}

Eine Abfrage auf jeder Seite mache ich wie folgt:
Code:
<?php
session_start();
if ($_SESSION['login_okay'])
{
  echo ("Diese Seite sollten Sie nur sehen können, wenn Sie erfolgreich angemeldet sind"."<br>");
?>
<html>
<body>
    LINK  
    <a href="seite3.php">Zurück zur Login-Seite</a>
<?php
} else 
{
   echo ("Leider haben Sie keinen Zugriff auf diese Seite" . "<br>");
   echo ("Bitte melden Sie sich auf der");
?> 
<a href="seite3.php">Loginseite an</a>
<?php 
} 
?>
</body>
</html>

Ist diese Art des LOGINS zuverlässig und sicher genug?
Gibt es vielleicht noch ergänzungsmöglichkeiten?
 

Dr. Glastonbury

Advanced Hacker
Hi dude,
ich würde noch empfehlen, die SessionID und die IP des Users, sowie die Loginzeit in der Datenbank abzulegen und jeweils zu vergleichen.
N cookie kann man sich schnell selber machen^^ die IP und sessionID eher nicht.

Und deinen QT könnte man noch ein wenig kürzen:
Code:
function check_login( $user, $pass )
{
include( "connectDB.inc.php" );

$user = addslashes( $user ); //SQL-Injections vermeiden

$abfrage = mysql_query ( "SELECT password FROM login WHERE user = '$user'" ); //Übersichtlicher, wenn du schreibst, was du aus der DB haben willst
if( mysql_num_rows( $abfrage ) != 0 )
   echo "Unbekannter Benutzername!";
else
{
  while( $row = mysql_fetch_object( $abfrage ) )
  {
    if ( $row->password == $pass )
        return true;
    else           
        return false;
  }
}
}
So ist das ganze etwas sauberer. Du solltest in deinen Queries eigentlich nicht * schreiben. Das ist zwar bequem, aber damit holst du entweder mal ungewollte Werte oder aber du weißt nicht mehr, was du überhaupt geholt hast.
Über addslashes werden überall, wo z.B. ein ' steht dieses in \' ersetzt, damit man keine SQL-Injections machen kann.

Code:
<?php
session_start();
if( $_SESSION['login_okay'] )
{
?>
Diese Seite sollten Sie nur sehen können, wenn Sie erfolgreich angemeldet sind
<br>
<html>
<body>
    LINK 
    <a href="seite3.php">Zurück zur Login-Seite</a>
<?php } 
else
{
?>
Leider haben Sie keinen Zugriff auf diese Seite <br>
Bitte melden Sie sich auf der
<a href="seite3.php">Loginseite an</a>
<?php } ?>
</body>
</html>

Hier hab ich nicht viel geändert - es wäre aber durchaus sinnvoll eine eigene PHP zu schreiben, die eine Funktion namens loggedin oder so beinhaltet und ein TRUE zurückliefer sobald das Session-Cookie oder wie ich ja vorschlagen würde auch IP und SessionID, stimmen. Gut wäre auch ein Mechanismus, der den User nach einer bestimmten Zeit wieder ausloggt - diese Funktion müsste ebenfalls die loggedin-Funktion besitzen.

Ansonsten sollte das von der Idee her gehen ;)
 
Oben