Ist dieser Login/Logout Script sicher?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anmelden
array
beispiel
buchstabe
code
datei
doppel
eingabe
festen string
frage
header
index
jemand
klartext
login
ordner
parameter
tastatur
vorteil
zeichen
-
Hallo ich wollte mal fragen ob dieser Script sicher ist. Das ganze soll ohne MySQL funktionieren. Die ganze Website ist ein templatesystem.
login.php
<?php $a = array(); $a['filename'] = 'login.tpl'; $a['data'] = array(); if(isset($_POST['user'], $_POST['pass'], $_POST['subm'])) { $user_post = strtolower($_POST['user']); $pass_post = strtolower($_POST['pass']); $subm_post = strtolower($_POST['subm']); if(md5($user_post)==$user AND md5($pass_post)==$pass) { setcookie('username', md5($user_post), time()+60*60*24); setcookie('password', md5($pass_post), time()+60*60*24); header('Location: index.php'); } else { echo '<script type="text/javascript"> <!-- alert("Wrong Username or Password"); --> </script>'; } } return $a; ?>
die Variabeln $user und $pass sind in md5 geschrieben.
logout.php
<?php $a = array(); $a['filename'] = 'logout.tpl'; $a['data'] = array(); if(isset($_COOKIE['username'], $_COOKIE['password'])) { setcookie('username', ''); setcookie('password', ''); header('Location: index.php'); exit; } else { $logout_msg = "Logout ist fehlgeschlagen"; } return $a; ?>
P.S. login und logout werden included und haben jeweils eine .tpl datei die das formular erstellt. der include folgt durch den url index.php?section=login
login und logout sind in einem eigenem templatesystem gefasst und von der eigentlich webseite abgeschnitten ^^
also ums leicht zu sagen hier die ordnerüubsicht:
admin
includes
theme
tpl
config.php (hier steht nicht der md5 hash drin)
index.php
theme.php
variables.php
der admin ordner sieht so aus:
css
includes
tpl
config.php (md5 hash vom username und passwort)
index.php
variabel.php
also ist das ganze sicher was ich produziere ^^
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
also ist das ganze sicher was ich produziere ^^
Schön wenn Leute sich ihre fragen selbst beantworten können
Also was mir sofort auffällt was mir nicht gefällt ist das absichern per Cookie. Warum nutzt du keine Sessions? Was mich dann als nächstes stört, ist die Fehlermeldung per JS. Was passiert mit den Usern die JavaScript aus haben?
Noch was: Du hast vergessen böse Zeichen aus den Eingaben rauszuholen, dafür ist z.B. mysql_(real_)escape_string(), htmlentities() und addslashes(). -
Ich bin halt neu in php und weil ich iwie sessions nicht kenne aber cookies benutze ich cookies. ich werd mich mal über sessions informieren. 2. fehler ok werd das dann über ner variabel an die tpl datei schicken damit das ausgegebn wird. 3. frage WTF are that ^^ ich kenn die funktionen ganet und was meinste mit bösen zeichen. lerrtaste oder was.
P.S.: falls das jemand falsch verstanden hat er soll nur einer reinkönnen unzwar der admin es gibt keine registrieung oder sowas es existiert nur 1 user ^^
P.S.S.: hat zwar nichts damit zu tun aber was bedetet eig P.S. die bedeutung kenn ich aber was ist die ausschreibung von der abkürzung.
Edit: mysql_(real_)escape_string() ist doch was mit mysql aber das script benutz kein mysql
Beitrag zuletzt geändert: 3.1.2010 1:38:12 von stef264 -
Cookies haben das Problem das ein User Cookies einfach deaktivieren könnte.
Zu bösen Zeichen: jemand könnte sich anmelden ohne die Zugangsdaten zu haben! Usereingaben immer prüfen! -
Zu bösen Zeichen: jemand könnte sich anmelden ohne die Zugangsdaten zu haben! Usereingaben immer prüfen!
wie soll das den gehen? es wird doch überprüft ob die eingabe stimmt und auf jedem unterpunkt der seite werden die beiden cookies überprüft.
-
if(isset($_POST['user'], $_POST['pass'], $_POST['subm'])) { // subm ist nicht nötig. Aber das nicht wichtig $user_post = strtolower($_POST['user']); $pass_post = strtolower($_POST['pass']); // strtolower macht das Knacken einfacher. Man muss 26 Buchstaben weniger testen jedesmal, wenn man Brute Force benutzt. (Das ist ein riesen Vorteil.) $subm_post = strtolower($_POST['subm']); // Auch nicht nötig if(md5($user_post)==$user AND md5($pass_post)==$pass) { /* md5 ist etwas veraltet. Heutzutage nutzt man sha1 und "Salted Hashes" (Wikipedia). Ein md5 Hash in Klartext um zu wandeln, geht sehr schnell, bei kürzeren PWs ;) */ setcookie('username', md5($user_post), time()+60*60*24); setcookie('password', md5($pass_post), time()+60*60*24); // tele hat ja schon gesagt; Lieber Sessions header('Location: index.php'); } else { echo '<script type="text/javascript"> <!-- alert("Wrong Username or Password"); --> </script>'; } } return $a;
Insgesamt finde ich es aber sehr gut. Im Vergleich zu anderen Sachen, die man hier sieht... -
Merke: MD5 ist auch heut´ noch angebracht, zumindest, wenn man´s richtig macht.
Und das geht so: Mixe einen festen String in den Parameter, den du an md5() weiter gibst. Also einmal über die Tastatur. Beispiel:
$var = md5('sdfsfgagasfdg12423tghtztrthfs356sd'.$user_post.'asdf2345452ds134132');
Diesen festen String hälst du geheim. Bei dieser Länge, wie ich ihn als Beispiel gegeben habe, ist es praktisch unmöglich, an die Passwörter zu kommen. Mixe hier und da noch ein Zeichen rein, oder nehme eins raus, dann hast du einen sicheren Hash, da niemand die Zusatzzeichen kennt. -
cool ich danke euch für die hilfe ^^ ich werd später nochmal den neuen script reinedititeren damit ich auch weiß das alles richtig ist ^^
Edit 1: hab noch ne frage ist es sicherer wenn ich das pw doppel encode also einmal mit md5 dann den code mit sha1??
Beitrag zuletzt geändert: 3.1.2010 17:45:52 von stef264 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage