Kalma
Erfahrenes Mitglied
Hallo,
ich habe mal ein Login-System was auf Sicherheit achten soll.
Ich habe es hier mal gepostet und wollte wissen, wie ihr es findet:
und die config.inc.php
Danke
mfG
David
ich habe mal ein Login-System was auf Sicherheit achten soll.
Ich habe es hier mal gepostet und wollte wissen, wie ihr es findet:
PHP:
<?php
require_once 'config.inc.php';
$submit = (isset($_POST['check_login'])) ? true : false;
$machine = (isset($_POST['check_machine'])) && (!empty($_POST['check_machine'])) ? true : false;
if($submit == true && $machine == false) {
$nickname = (isset($_POST['nickname'])) && (!empty($_POST['nickname'])) ? $_POST['nickname'] : false;
$passwort = (isset($_POST['passwort'])) && (!empty($_POST['passwort'])) ? $_POST['passwort'] : false;
$save_login = (isset($_POST['save_login'])) && ($_POST['save_login'] == true) ? true : false;
if($nickname == false) {
// Benutzer hat das Feld "Nickname" nicht ausgefüllt
header('Location: login_form.php?error=1&no_nickname=1');
exit;
}
if($passwort == false) {
// Benutzer hat das Feld "Passwort" nicht ausgefüllt
header('Location: login_form.php?error=1&no_password=1');
exit;
}
// Verschlüsseltes Passwort erstellen
$hash_passwort = sha1($passwort);
// Benutzer suchen
$find_user = 'SELECT
*
FROM
user
WHERE
`user_nickname` = "'.mysql_real_escape_string($nickname).'"
LIMIT
1';
$find_user_result = @mysql_query($find_user);
$find_user_count = mysql_num_rows($find_user_result);
if($find_user_count == 0) {
// Es wurde kein Benutzer mit dem Nickname
// $nickname gefunden
// Weiterleitung zur login_form.php
header('Location: login_form.php?error=1&no_user_found=1');
exit;
} else {
// Es wurde ein Benutzer gefunden
// Prüfen, ob dieser Aktiv ist
$check_user = mysql_fetch_array($find_user_result);
$user_aktiv = $check_user['user_aktiv'];
$user_passwort = $check_user['user_passwort'];
if($user_aktiv == 0) {
// User ist nicht aktiv
// Weiterleitung zur login_form.php
header('Location: login_form.php?error=1&user_not_active=1');
exit;
} else {
// Benutzer ist aktiv
// Passwort prüfen
if($user_passwort != mysql_real_escape_string($hash_passwort)) {
// Passwort ist nicht korrekt
// Weiterleitung zur login_form.php
header('Location: login_form.php?error=1&wrong_password=1');
exit;
} else {
// Passwort ist korrekt
// Benutzer kann eingeloggt werden
// BenutzerInformationen auslesen
$id = $check_user['user_id'];
$nickname = $check_user['user_nickname'];
$email = $check_user['user_email'];
$login_time = time();
// In Sessions schreiben
$_SESSION['user_id'] = $id;
$_SESSION['user_nickname'] = $nickname;
$_SESSION['user_email'] = $email;
$_SESSION['login_time'] = $login_time;
// Will der User eingeloggt bleiben?
if($save_login == true) {
// User möchte für 30 TAGE eingeloggt bleiben
setcookie('secure_login', $id, time()+3600 * 24 * 30);
}
// Weiterleitung zur Index.php
header('Location: index.php?welcome=1');
exit;
}
}
}
} else {
// Benutzer hat nicht den Submit Button benutzt
// Benutzer hat das hidden-Feld "check_machine" ausgefüllt
// Weiterleitung zur login_form.php
// Ausführung abbrechen
header('Location: login_form.php');
exit;
}
?>
und die config.inc.php
PHP:
<?php
error_reporting(E_ALL);
session_start();
$n = "\n";
// Was wird in Sessions gespeichert
// UserID
// UserNick
// UserEmail
// UserIP
// Login Time
// mySQL connect
$host = 'localhost';
$user = '***';
$pass = '***';
$db = '***';
mysql_connect($host, $user, $pass, $db);
mysql_select_db($db);
// Maximale Sitzungszeit
// 3 Stunden
define('SESSION_LIFE', 60*60*3);
// Prüfen, ob ein User den AutoLogin aktiviert hat
$cookie = isset($_COOKIE['secure_login']) ? $_COOKIE['secure_login'] : false;
if((isset($cookie)) && (!empty($cookie)) && (is_numeric($cookie)) && (!isset($_SESSION['user_id'])) || (empty($_SESSION['user_id']))) {
// Benutzer suchen
$find_user = 'SELECT
*
FROM
user
WHERE
`user_id` = "'.mysql_real_escape_string($cookie).'"
LIMIT
1';
$find_user_result = @mysql_query($find_user);
$find_user_count = mysql_num_rows($find_user_result);
if($find_user_count == 1) {
// Es wurde ein Benutzer gefunden
// Prüfen, ob dieser Aktiv ist
$check_user = mysql_fetch_array($find_user_result);
$user_aktiv = $check_user['user_aktiv'];
if($user_aktiv == 0) {
// User ist nicht aktiv
// Weiterleitung zur login_form.php
header('Location: login_form.php?error=1&user_not_active=1');
exit;
} else {
// Benutzer ist aktiv
// Benutzer kann eingeloggt werden
// BenutzerInformationen auslesen
$id = $check_user['user_id'];
$nickname = $check_user['user_nickname'];
$email = $check_user['user_email'];
$login_time = time();
// In Sessions schreiben
$_SESSION['user_id'] = $id;
$_SESSION['user_nickname'] = $nickname;
$_SESSION['user_email'] = $email;
$_SESSION['login_time'] = $login_time;
// Weiterleitung zur Index.php
header('Location: index.php?welcome=1');
exit;
}
}
}
function clear_sessions()
{
$_SESSION['user_id'] = '';
$_SESSION['user_ip'] = '';
$_SESSION['user_nickname'] = '';
$_SESSION['login_time'] = '';
// Session stoppen
session_destroy();
}
// Prüfen, ob User eingeloggt ist
function checkuser()
{
if((!isset($_SESSION['user_id'])) || (empty($_SESSION['user_id'])) || (!is_numeric($_SESSION['user_id']))) {
// User ist nicht eingeloggt
// User ist eingeloggt, $_SESSION['user_id'] hat keinen Wert, leer
// $_SESSION['user_id'] besitzt einen Wert, der nicht numerisch ist.
// Weiterleitung zum Login Formular
// Ausführung abbrechen
header('Location: login_form.php?error=1¬_logged_in=1');
clear_sessions();
exit;
} else {
if((!isset($_SESSION['user_ip'])) || (empty($_SESSION['user_ip']))) {
// $_SESSION['user_ip'] existiert nicht
// $_SESSION['user_ip'] ist leer
// IP zuweisen
$_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
}
if((!isset($_SESSION['user_nickname'])) || (empty($_SESSION['user_nickname']))) {
// User ist nicht eingeloggt
// User ist eingeloggt, $_SESSION['user_nickname'] hat keinen Wert, leer
// Weiterleitung zum Login Formular
// Ausführung abbrechen
header('Location: login_form.php?error=1¬_logged_in=1');
clear_sessions();
exit;
}
}
if((!isset($_SESSION['login_time'])) || (empty($_SESSION['login_time'])) || (time() > ($_SESSION['login_time']+SESSION_LIFE))) {
// Loginzeit von $session_life_time ist abgelaufen
// User wird automatisch ausgeloggt
header('Location: login_form.php?error=1&login_time=1');
clear_sessions();
exit;
}
}
?>
Danke
mfG
David