|
 |
|
| Autor |
Nachricht |
thepiep Beliebter [User]

Anmeldung: 24.08.06 Beiträge: 329 Wohnort: NRW
|
Verfasst am: 09.04.2007, 12:24 Titel: Login-Script-Frage |
|
|
Ich habe für mein CMS ein Loginscript geschrieben und wollte fragen, ob es Verbesserungsmöglichkeiten gibt (Performance) oder sogar Sicherheitslücken:
Das Passwort wird bereits als md5 übergeben (Javascript)
EDIT: Habe die POST-Daten entsprechend "korrigiert"...
| Code: |
<?php
// /admin/include/login.php
$qlogins = mysql_query("SELECT COUNT(1) FROM logins WHERE ip = '".ip."' AND time > '".(time-3600)."';") or ($error[] = mysql_error());
$anz_logins = mysql_result($qlogins,0);
if($anz_logins <= 3){
$POST_username = strip_tags(mysql_real_escape_string($_POST[username]));
if(strlen($POST_username) >= 3 && !isset($_COOKIE['cmsuser'])){
$quser = mysql_query("SELECT * FROM user WHERE $config[intern_loginname] = '$POST_username'") or ($error[] = mysql_error());
if($luser = mysql_fetch_object($quser)){
if($_POST['password'] == $luser->password){ // Passwort überprüfen
$logincheck = true;
// Userdaten "einlesen"
define('user_id', $luser->id);
define('user_email', $luser->email);
define('user_nickname', $luser->nickname);
define('user_password', $luser->password);
define('user_forename', $luser->forename);
define('user_surname', $luser->surname);
define('user_title', $luser->title);
define('user_rang', $luser->rang);
define('user_registerdate', $luser->registerdate);
define('user_lastlogindate', $luser->lastlogindate);
define('user_lastchangedate', $luser->lastchangedate);
mysql_query("UPDATE user SET lastlogindate = 'time' WHERE id = 'user_id'") or ($error[] = mysql_error());
setcookie('cmsuser',user_id . user_password,time + $config['intern_logintime'],'/'); // Keks setzen
$login_message = '<strong class="positive box">Hinweis: Login erfolgreich!</strong>'; // Wird nie angezeigt
}else{
$error[] = 'User "'.$POST_username.'": Falsches Passwort beim Login.';
$login_message = '<strong class="error box">Fehler: Passwort falsch!</strong>';
mysql_query("INSERT INTO logins (ip,time,username) VALUES ('".ip."','".time."','$POST_username');") or ($error[] = mysql_error());
}}else{
mysql_query("INSERT INTO logins (ip,time,username) VALUES ('".ip."','".time."','$POST_username');") or ($error[] = mysql_error());
$error[] = 'User "'.$POST_username.'": Nicht gefunden.';
$login_message = '<strong class="error box">Fehler: Benutzer existiert nicht!</strong>';
$_POST['username'] = '';
$POST_username='';
}}else{
$error[] = 'Zu viele Loginversuche.';
$login_message = '<strong class="error box">Fehler: Es sind pro Stunde maximal 3 fehlgeschlagene Logins erlaubt!</strong>';
}
?>
|
Zuletzt bearbeitet von thepiep am 09.04.2007, 15:19, insgesamt einmal bearbeitet
|
|
| Nach oben |
|
 |
lundner Beliebter [User]


Anmeldung: 15.11.06 Beiträge: 312 Wohnort: Zingst
|
Verfasst am: 09.04.2007, 13:09 Titel: |
|
|
variablen solltest du nie ungeprüft in mysql_querys übernehmen:
| Code: |
$error[] = 'User "'.$_POST[username].'": Falsches Passwort beim Login.';
$login_message = '<strong class="error box">Fehler: Passwort falsch!</strong>';
|
hier gibst du den übergebenen namen ungefiltert wieder aus, relativ gefährlich, vorher durch strip_tags etc. alles gefährliche entfernen lassen
dann zu der mysql-sache:
| Code: |
mysql_query("INSERT INTO logins (ip,time,username) VALUES ('".ip."','".time."','$_POST[username]');") or ($error[] = mysql_error());
|
niemals die $_POST-Variablen direkt in die query schreiben! (siehe -> http://de.wikipedia.org/wiki/SQL-Injektion
vorher auf jedenfall ein:
| Code: |
mysql_real_escape_string($_POST[username])
|
verwenden...
das wär erstmal das erste was ich so anzubringen habe  _________________ meine Homepage: lundner.com
meine Fotos: photos.lundner.com
|
|
| Nach oben |
|
 |
thepiep Beliebter [User]

Anmeldung: 24.08.06 Beiträge: 329 Wohnort: NRW
|
Verfasst am: 11.04.2007, 14:44 Titel: |
|
|
Danke für Tipps - habe die Änderungen umgesetzt und hoffe, dass das Script jetzt einigermaßen sicher ist^^
|
|
| Nach oben |
|
 |
|
|
 |
|
Alle Zeiten sind GMT + 1 Stunde
|
| Seite 1 von 1 |
|  |