Diskussion zum Artikel Login-Skript mit Sessions, PHP und MySQL
in der Kategorie
PHP, Mysql & Apache
Diesen Code bitte nicht leichtfertig verwenden, er könnte trotz meiner Korrekturen immer noch Sicherheitsmängel aufweisen.
Dieser Programmcode stammt nicht von mir und wurde auch nicht von mir hier eingestellt, sondern wurde nur aufgrund erheblicher Sicherheitsmängeln von mir modifiziert!
gez. Sascha Ahlers
Viele wüsste gerne wie man ein Login-Skript erstellt. Ich habe hier nun eins.
Das Skript basiert auf Sessions, PHP und MySQL.
Da es nicht den gleichen Username geben darf, aktiviert man die Eigenschaft „UNIQUE“ in der MySQL-Datenbank.
Der SQL Code sieht so aus:
SQL
CODE
CREATE TABLE `users` (
`UserID` int(11) NOT NULL auto_increment,
`UserName` varchar(30) collate utf8_unicode_ci NOT NULL default '',
`UserPass` varchar(32) collate utf8_unicode_ci NOT NULL default '',
`UserSession` varchar(32) collate utf8_unicode_ci default NULL,
`UserMail` varchar(150) collate utf8_unicode_ci NOT NULL default '',
PRIMARY KEY (`UserID`),
UNIQUE KEY `NickName` (`UserName`),
UNIQUE KEY `UserMail` (`UserMail`),
UNIQUE KEY `UserSession` (`UserSession`)
) ENGINE=MyISAM;
Falls man das Passwort vergessen hat, kann man es überschreiben.
Der Username muss angepasst werden und das Passwort kann geändert werden.
Für das Anlegen eines Users muss man diesen Code auch eingeben.
SQL
CODE INSERT INTO users SET UserName = 'admin', UserPass = MD5('test'), UserMail = 'mrhappiness@inter.net';
login.php
CODE
<?php
session_start();
include_once('sessionhelpers.inc.php');
if ( isset($_POST['login']) ) {
$userid = check_user($_POST['username'], $_POST['userpass']);
if ( $userid ) {
login($userid);
} else {
echo '<p>Ihre Anmeldedaten waren nicht korrekt!</p>';
}
}
if ( !logged_in() ) {
echo <<<END
<form method="post" action="login.php">
<label>Benutzername:</label> <input name="username" type="text"><br />
<label>Passwort:</label> <input name="userpass" type="password" id="userpass"><br />
<input name="login" type="submit" id="login" value="Einloggen">
</form>
END;
} else {
echo '<p><a href="soll-geschuetzt-werden.php">Testseite</a></p>';
echo '<p><a href="logout.php">Ausloggen</a></p>';
}
?>
Auf allen Seiten, die geschützt werden sollen, fügt man den folgenden Code ein.
soll-geschuetzt-werden.php
CODE
<?php
session_start();
include_once('sessionhelpers.inc.php');
echo 'Sie sind ';
if ( !logged_in() ) {
echo 'nicht ';
}
echo 'eingeloggt.<p />';
if ( !logged_in() ) {
echo '<p><a href="login.php">Anmelden</a></p>';
}
if ( logged_in() ) {
echo '<p>Geschützter Bereich</p>';
echo '<p><a href="logout.php">Ausloggen</a></p>';
}
?>
Nun noch das Ausloggen-Skript.
logout.php
CODE
<?php
session_start();
include_once('sessionhelpers.inc.php');
echo '<p>Sie sind ';
if ( !logged_in() ) {
echo 'nicht ';
}
echo 'eingeloggt.</p>';
logout();
echo '<p>Sie sind ';
if ( !logged_in() ) {
echo 'nicht ';
}
echo 'eingeloggt.</p>';
echo '<p><a href="login.php">Einloggen</a></p>';
?>
Den folgenden Code muss man anpassen. Bei mysql_connect muss man den Servername, Benutzer und das Passwort anpassen. In mysql_selcet_db muss man den Datenbankname eingeben.
sessionhelpers.inc.php
CODE
<?php
/**
* @return void
*/
function connect () {
$con = mysql_connect('host', 'benutzername', 'passwort') or exit(mysql_error());
mysql_select_db('datenbank', $con) or exit(mysql_error());
}
/**
* @param string $name
* @param string $pass
* @return boolean
*/
function check_user ( $name, $pass ) {
// magic quotes anpassen
if ( get_magic_quotes_gpc() ) {
$name = stripslashes($name);
$pass = stripslashes($pass);
}
// escapen von \x00, \n, \r, \, ', " und \x1a
$name = mysql_real_escape_string($name);
// escapen von % und _
$name = str_replace('%', '\%', $name);
$name = str_replace('_', '\_', $name);
$sql = 'SELECT UserId FROM users WHERE UserName = \'' . $name . '\' AND UserPass=\'' . md5($pass) . '\'';
if ( !$result = mysql_query($sql) ) {
exit(mysql_error());
}
if ( mysql_num_rows($result) == 1 ) {
$user = mysql_fetch_assoc($result);
return ( $user['UserId'] );
} else {
return ( false );
}
}
/**
* @param int $userid
* @return void
*/
function login ( $userid ) {
$sql = 'UPDATE users SET UserSession = \'' . session_id() . '\' WHERE UserId = ' . ((int)$userid);
if ( !mysql_query($sql) ) {
exit(mysql_error());
}
}
/**
* @return boolean
*/
function logged_in () {
$sql = 'SELECT UserId FROM users WHERE UserSession = \'' . session_id() . '\'';
if ( !$result = mysql_query($sql) ) {
exit(mysql_error());
}
return (mysql_num_rows($result) == 1);
}
/**
* @return void
*/
function logout () {
$sql = 'UPDATE users SET UserSession = NULL WHERE UserSession = \'' . session_id() . '\'';
if ( mysql_query($sql) ) {
exit(mysql_error());
}
}
connect();
?>
Das Login-Skript stammt von http://www.php-resource.de.
.
-------------------
Dieser Artikel steht unter der Creative Commons Lizenz.
in der Kategorie
PHP, Mysql & Apache
Diesen Code bitte nicht leichtfertig verwenden, er könnte trotz meiner Korrekturen immer noch Sicherheitsmängel aufweisen.
Dieser Programmcode stammt nicht von mir und wurde auch nicht von mir hier eingestellt, sondern wurde nur aufgrund erheblicher Sicherheitsmängeln von mir modifiziert!
gez. Sascha Ahlers
Viele wüsste gerne wie man ein Login-Skript erstellt. Ich habe hier nun eins.
Das Skript basiert auf Sessions, PHP und MySQL.
Da es nicht den gleichen Username geben darf, aktiviert man die Eigenschaft „UNIQUE“ in der MySQL-Datenbank.
Der SQL Code sieht so aus:
SQL
CODE
CREATE TABLE `users` (
`UserID` int(11) NOT NULL auto_increment,
`UserName` varchar(30) collate utf8_unicode_ci NOT NULL default '',
`UserPass` varchar(32) collate utf8_unicode_ci NOT NULL default '',
`UserSession` varchar(32) collate utf8_unicode_ci default NULL,
`UserMail` varchar(150) collate utf8_unicode_ci NOT NULL default '',
PRIMARY KEY (`UserID`),
UNIQUE KEY `NickName` (`UserName`),
UNIQUE KEY `UserMail` (`UserMail`),
UNIQUE KEY `UserSession` (`UserSession`)
) ENGINE=MyISAM;
Falls man das Passwort vergessen hat, kann man es überschreiben.
Der Username muss angepasst werden und das Passwort kann geändert werden.
Für das Anlegen eines Users muss man diesen Code auch eingeben.
SQL
CODE INSERT INTO users SET UserName = 'admin', UserPass = MD5('test'), UserMail = 'mrhappiness@inter.net';
login.php
CODE
<?php
session_start();
include_once('sessionhelpers.inc.php');
if ( isset($_POST['login']) ) {
$userid = check_user($_POST['username'], $_POST['userpass']);
if ( $userid ) {
login($userid);
} else {
echo '<p>Ihre Anmeldedaten waren nicht korrekt!</p>';
}
}
if ( !logged_in() ) {
echo <<<END
<form method="post" action="login.php">
<label>Benutzername:</label> <input name="username" type="text"><br />
<label>Passwort:</label> <input name="userpass" type="password" id="userpass"><br />
<input name="login" type="submit" id="login" value="Einloggen">
</form>
END;
} else {
echo '<p><a href="soll-geschuetzt-werden.php">Testseite</a></p>';
echo '<p><a href="logout.php">Ausloggen</a></p>';
}
?>
Auf allen Seiten, die geschützt werden sollen, fügt man den folgenden Code ein.
soll-geschuetzt-werden.php
CODE
<?php
session_start();
include_once('sessionhelpers.inc.php');
echo 'Sie sind ';
if ( !logged_in() ) {
echo 'nicht ';
}
echo 'eingeloggt.<p />';
if ( !logged_in() ) {
echo '<p><a href="login.php">Anmelden</a></p>';
}
if ( logged_in() ) {
echo '<p>Geschützter Bereich</p>';
echo '<p><a href="logout.php">Ausloggen</a></p>';
}
?>
Nun noch das Ausloggen-Skript.
logout.php
CODE
<?php
session_start();
include_once('sessionhelpers.inc.php');
echo '<p>Sie sind ';
if ( !logged_in() ) {
echo 'nicht ';
}
echo 'eingeloggt.</p>';
logout();
echo '<p>Sie sind ';
if ( !logged_in() ) {
echo 'nicht ';
}
echo 'eingeloggt.</p>';
echo '<p><a href="login.php">Einloggen</a></p>';
?>
Den folgenden Code muss man anpassen. Bei mysql_connect muss man den Servername, Benutzer und das Passwort anpassen. In mysql_selcet_db muss man den Datenbankname eingeben.
sessionhelpers.inc.php
CODE
<?php
/**
* @return void
*/
function connect () {
$con = mysql_connect('host', 'benutzername', 'passwort') or exit(mysql_error());
mysql_select_db('datenbank', $con) or exit(mysql_error());
}
/**
* @param string $name
* @param string $pass
* @return boolean
*/
function check_user ( $name, $pass ) {
// magic quotes anpassen
if ( get_magic_quotes_gpc() ) {
$name = stripslashes($name);
$pass = stripslashes($pass);
}
// escapen von \x00, \n, \r, \, ', " und \x1a
$name = mysql_real_escape_string($name);
// escapen von % und _
$name = str_replace('%', '\%', $name);
$name = str_replace('_', '\_', $name);
$sql = 'SELECT UserId FROM users WHERE UserName = \'' . $name . '\' AND UserPass=\'' . md5($pass) . '\'';
if ( !$result = mysql_query($sql) ) {
exit(mysql_error());
}
if ( mysql_num_rows($result) == 1 ) {
$user = mysql_fetch_assoc($result);
return ( $user['UserId'] );
} else {
return ( false );
}
}
/**
* @param int $userid
* @return void
*/
function login ( $userid ) {
$sql = 'UPDATE users SET UserSession = \'' . session_id() . '\' WHERE UserId = ' . ((int)$userid);
if ( !mysql_query($sql) ) {
exit(mysql_error());
}
}
/**
* @return boolean
*/
function logged_in () {
$sql = 'SELECT UserId FROM users WHERE UserSession = \'' . session_id() . '\'';
if ( !$result = mysql_query($sql) ) {
exit(mysql_error());
}
return (mysql_num_rows($result) == 1);
}
/**
* @return void
*/
function logout () {
$sql = 'UPDATE users SET UserSession = NULL WHERE UserSession = \'' . session_id() . '\'';
if ( mysql_query($sql) ) {
exit(mysql_error());
}
}
connect();
?>
Das Login-Skript stammt von http://www.php-resource.de.
.
-------------------
Dieser Artikel steht unter der Creative Commons Lizenz.