Hallo Forum,
bezüglich diesen Threads möchte ich Euch fragen, was ihr von diesem Script und dessen Sicherheit haltet.
Es handelt sich eigentlich nur um einen Script, womit ich mich als einziger Admin einloggen, aber Schaulustige fernhalten möchte.
login:
mysqlconnect.php enthät die Datenbankvariablen.
logout.php:
check.php:
Beispielseite, die geschützt werden soll:
Eventuell könnte ich den Logout Script noch in check.php einbinden, um eine Datei zu sparen. Und zwar, dass der Link so gebildet wird: <a href="?logout">Logout</a>
Per Get würde ich auslesen, ob diese Variable existiert und ausloggen.
Gibt es Einwände?
Edit: Beim Logout.php habe ich nun noch die IP-Adresse des letzten Loggers eingefügt.
Weitere Frage: Was bringt md5, wenn ich das Passwort eh auf Seiten wie diesen umwandeln kann?
bezüglich diesen Threads möchte ich Euch fragen, was ihr von diesem Script und dessen Sicherheit haltet.
Es handelt sich eigentlich nur um einen Script, womit ich mich als einziger Admin einloggen, aber Schaulustige fernhalten möchte.
login:
PHP:
<?php
### Loginscript
session_start();
if(isset($_POST['submit'])) { // wenn Formular abgeschickt
if(isset($_POST['user']) && !empty($_POST['user']) && isset($_POST['passwort']) && !empty($_POST['passwort'])) { // wenn User und Passwort eingegeben und nicht leer sind
include('mysqlconnect.php'); // Datenbankverbindung
$dbSelect = mysql_select_db('datenbank',$connect); // Datenbankauswahl
$abfrage = mysql_query("SELECT user, passwort FROM tabelle WHERE user = '".mysql_real_escape_string($_POST['user'])."' LIMIT 1");
$row = mysql_fetch_array($abfrage);
if($_POST['user'] == $row['user'] && md5($_POST['passwort']) == $row['passwort']) {
$_SESSION['eingeloggt'] = TRUE; // eingeloggt
$_SESSION['user'] = $row['user'];
session_regenerate_id(); // neue Session-ID, um Session-Hijacking zu vermeiden
$meldung = 'Erfolgreich eingeloggt!';
header('Location: http://'.$_SERVER['SERVER_NAME'].'/admin');
} else { // Login fehlgeschlagen
// Administrator Benachrichtigung vorbereiten
$meldung = 'Falsches Login! Der Administrator wurde über Fehlversuch informiert!';
$benachrichtigung = "
<h1>Login-Fehlversuch</h1>\n
Soeben hat jemand versucht, sich in den ACP einzuloggen und schlug fehl.<br /><br />\n
<strong>IP-Adresse</strong>: ".$_SERVER['REMOTE_ADDR']."<br />\n
<strong>Datum | Uhrzeit</strong>: ".date('d.m.Y - H:i:s')."<br /><br />\n
<strong>Eingegebene Logindaten waren:</strong><br />\n
<strong>ID-Kennung</strong>: ".htmlspecialchars($_POST['idkennung'])."<br />\n
<strong>User</strong>: ".htmlspecialchars($_POST['user'])."<br />\n
<strong>Passwort</strong>: ".htmlspecialchars($_POST['passwort'])."<br />\n";
$header = "MIME-Version: 1.0\n";
$header .= "Content-type: text/html; charset=iso-8859-1\n";
$header .= "From: [email protected] (mein Name)\n";
// Administrator über Login-Fehlversuch benachrichtigen
@mail('[email protected]', 'Login-Fehlversuch', $benachrichtigung, $header); // Das @ vor dem mail unterdrückt Fehlermeldungen
// # Idee: eventuell noch in Datenbank speichern
}
} else { // User und Passwort nicht eingegeben
$meldung = 'Logindaten nicht vollständig!';
}
}
?>
<!-- PROVOSORISCH !-->
<link href="../style.css" rel="stylesheet" type="text/css" />
<div id="container">
<h1>Login</h1>
<?php if(!empty($meldung)) { ?>
<p class="red strong"><?php echo $meldung; ?></p>
<?php
}
?>
<form action="" method="post">
<table>
<tr><td><strong>ID-Kennung:</strong></td><td><input type="password" name="idkennung" /></td></tr>
<tr><td><strong>User:</strong></td><td><input type="text" name="user" value="<?php if(isset($_POST['user'])) echo $_POST['user']; ?>" /></td></tr>
<tr><td><strong>Passwort:</strong></td><td><input type="password" name="passwort" /></td></tr>
<tr><td><input type="submit" name="submit" value="Einloggen" /></td></tr>
</table>
</form>
</div>
logout.php:
PHP:
<?php
// Logout
session_start();
include('mysqlconnect.php');
mysql_select_db('datenbank',$connect);
$query = mysql_query("UPDATE tabelle SET lastLogin = NOW(), ip = '".$_SERVER['REMOTE_ADDR']."' WHERE user = '".mysql_real_escape_string($_SESSION['user'])."' LIMIT 1", $connect); // "Letzter Login" aktualisieren
session_destroy(); // Session zerstören/beenden
header('Location: http://'.$_SERVER['SERVER_NAME'].'/login'); // Nach Logout zur Loginseite weiterleiten
?>
PHP:
<?php // Dieser Script wird in jede Datei includet, die geschützt werden soll
session_start();
// Wenn $_SESSION['eingeloggt'] nicht existiert, false ist oder $_SESSION['user'] nicht existiert
if(!isset($_SESSION['eingeloggt']) or !$_SESSION['eingeloggt'] or !isset($_SESSION['user'])) {
header('Location: http://'.$_SERVER['SERVER_NAME'].'/login'); // zur Loginseite weiterleiten
exit; // Abbrechen. Ganz wichtig, um die geschützte Datei nicht auszugeben
}
// ansonsten, wenn also eingeloggt, alles in bester Ordnung und die Datei ist sichtbar.
?>
PHP:
<?php include('../login/check.php'); ?>
Eingeloggt<br />
<a href="/login/logout.php">Logout</a>
Per Get würde ich auslesen, ob diese Variable existiert und ausloggen.
Gibt es Einwände?
Edit: Beim Logout.php habe ich nun noch die IP-Adresse des letzten Loggers eingefügt.
Weitere Frage: Was bringt md5, wenn ich das Passwort eh auf Seiten wie diesen umwandeln kann?
Zuletzt bearbeitet: