Antworten auf deine Fragen:
Neues Thema erstellen

einfaches aber sicheres Login-Sript

d3mueller

PC-Freak :D

Hi, ich brauche ein einfaches, aber sicheres Login-Skript (ohne registrierungsfunktion).
Meins, welches ich versucht habe, funktioniert leider nicht, da er iwie die Session beim Reload löscht oder so..

Kennt ihr gute (aktuelle) tutorials?

Danke schon mal

Lg
Dennis
 

TobiKo

Nicht mehr ganz neu hier

AW: einfaches aber sicheres Login-Sript

Ich denke das ist schonmal ein guter Anfang.

Fehlen nur noch ein paar Funktionen um potentiellen Schadcode raus zu filtern. Guck dir mal html_entities() und mysql_real_escape_string() an.

Gruß Tobi
 

d3mueller

PC-Freak :D

AW: einfaches aber sicheres Login-Sript

Auf die Idee bin ich ja noch gar nicht gekommen... xD.
Aber danke^^
Ich denke das ist schonmal ein guter Anfang.

Fehlen nur noch ein paar Funktionen um potentiellen Schadcode raus zu filtern. Guck dir mal html_entities() und mysql_real_escape_string() an.

Gruß Tobi
Danke, ja, in dem Stil ist mein jetziges auch. Der einzige Unterschied ist die verschlüsselungsmethode. md5 ist veraltet und unsicher, also habe ich sha512 verwendet.
Das sollte ja dann sicher sein, oder?
Das mit html_entities() is ne gute Idee. Hab das noch reingepackt. Danke :D
 

Robbyn-

PHP / Flex Programmierer

AW: einfaches aber sicheres Login-Sript

md5 ist veraltet und unsicher

Wer sagt das den?
md5 ist genauso unsicher wie sha512, da nimmt sich nicht wirklich viel. Um sowas sicherer zu machen, kannst du, wenn du sachen verschlüsselst, einen SALT vor jedem d5 key schreiben z.b.

Unsicher:
PHP:
$var = md5($var);

Sicherer:
PHP:
define("SALT", "HJDH76490§)(/§j");

$var = md5(SALT.$var.SALT);

Dann kann von mir aus jeder das md5 Passwort besitzen, das Passwort daraus wird er nie bekommen, da selbst wenn er schaffen sollte es zu entschlüsseln, das Passwort nicht zu gebrauchen ist, wegen den Salt halt.
 

d3mueller

PC-Freak :D

AW: einfaches aber sicheres Login-Sript

Hm, okay. Steht halt iwie überall im Internet, das man md5 viel leichter knacken kann.

Ja SALT hab ich auch schon überlegt, ich verstehs aber iwie nicht so ganz^^.
Hab hier auch ein Tutorial:
http://www.foxplex.com/sites/php-passwoerter-sicher-verschluesseln/

Da ist der folgende Code her:
Code:
<?php 
    function encrypt_password($password) {
        $secret_salt = "topsecretsalt";
        $password = "testpasswort";
        $salted_password = $secret_salt . $password;
        $password_hash = hash('sha256', $salted_Password);

        return $password_hash;
    }

     // Benutzername
     $username = "foxplex";

     // Vom Benutzer eingegebenes Passwort
     $user_password = "testpasswort";

     // Passwort des Benutzers verschlüsseln
     $user_password_hash = encrypt_password($user_password);

     // Benutzer und Hash prüfen
     $sql = "SELECT userid FROM users WHERE username = '$username' AND password_hash = '$user_password_hash'";

     $result = $db->query($sql);

     if ($result->num_rows == 1) {
        // Benutzername und Passwort sind korrekt
        echo "User authenticated";
        exit(0);
     } else {
        // Benutzername oder Passwort sind falsch
        echo "Wrong username or password";
        exit(1);
     }
?>

Da verstehe ich die Funktion am Anfang nicht so ganz.wie soll da das vom benutzer eingegebene Passwort verschlüsselt werden mit SALT? Weil da stehen doch schon konkrete Werte in der Funktion, aber das benutzerpasswort könnte ja anders sein? Und der secret_salt steht auch ganz unsicher im Code drinnen, oder?

Und wenn das klappt, dann müsste ich ja das gleiche mit einem Adminpasswort machen und den erhaltenen Wert in die Datenbanktabelle reinschreiben oder?
 

Robbyn-

PHP / Flex Programmierer

AW: einfaches aber sicheres Login-Sript

Ja er steht im Code drin, das ist es ja, keiner kommt ean deinen PHP Code ran, wenn er richtig kompiliert wird, nur du kennst den SALT und der kann so kryptisch und unläsbar sein, wie es nur geht.

Das Prinzip dahinter ist, wenn jemand einen md5 Schlüssel bekommen sollte und es schafft ihn zu entschlüsseln, dann wird er mit dem entschlüsselten Wert nicht viel anfangen können, da dies ja nicht das richtige Passwort ist, da du ja den Salt davor gehangen hast und somit das wahre Passwort für den Hacker unläsbar gemacht hast.
 

d3mueller

PC-Freak :D

AW: einfaches aber sicheres Login-Sript

Okay, danke.
Ich versteht, wie gesagt, diese Funktion halt nicht so ganz:
Code:
    function encrypt_password($password) {
        $secret_salt = "topsecretsalt";
        $password = "testpasswort";
        $salted_password = $secret_salt . $password;
        $password_hash = hash('sha256', $salted_Password);

        return $password_hash;
    }

Kann ich das auch ohne Funktion machen? Ist glaube ich einfacher.

Weil das Passwort soll ja in einer Datenbank stehen.
Also mach ich ein Skript, das das Passwort mit SALT in die Datenbank einträgt und führe es aus. Dann kann ich das löschen und die Benutzereingaben genauso verschlüsseln und überprüfen, ob die Werte übereinstimmen.
Würde das so gehen?
 

Robbyn-

PHP / Flex Programmierer

AW: einfaches aber sicheres Login-Sript

Theoretisch sollte das auch ohne funktion klappen, würde aber nicht verstehe wieso du sowas ohne funktion machen würdest wollen, so sparst du dir viel Code.

Du kannst die Benutzereingaben auch verschlüsseln, solange sie eben halt nur zur Kontrolle sind und nicht mehr für die weitere Verwendung in deiner Webseite. Sind sie einmal verschlüsselt lassen sie sich halt sehr schwer wieder entschlüsseln, ganz davon zu schweigen das das Salt am anfang(vielleicht auch am ende :D) mit dran hängt ;)
 

d3mueller

PC-Freak :D

AW: einfaches aber sicheres Login-Sript

Theoretisch sollte das auch ohne funktion klappen, würde aber nicht verstehe wieso du sowas ohne funktion machen würdest wollen, so sparst du dir viel Code.
Ja, so bin ich xD. Das liegt daran, das ich lieber mehr schreibe, und hinterher noch weiß was ich genau gemacht habe, als das ich irgendwas da reinschreibe, was ich eh nicht verstehe. Weil irgendwann muss man da dann was ändern und dann hab ich ein Problem ^^
Du kannst die Benutzereingaben auch verschlüsseln, solange sie eben halt nur zur Kontrolle sind und nicht mehr für die weitere Verwendung in deiner Webseite. Sind sie einmal verschlüsselt lassen sie sich halt sehr schwer wieder entschlüsseln, ganz davon zu schweigen das das Salt am anfang(vielleicht auch am ende :D) mit dran hängt ;)
Okay.
Ja, sie sind nur zur Kontrolle. Aber man könnte ja theoretisch 2 Variablen für Benutzernamen machen. 1 die verschlüsselt wird und zur überprüfung dient, und eine andere, die man ausgibt oder so.

Aber danke auf jeden Fall. Jetzt hab ich dann ein (hoffentlich) sehr sicheres Login-System. :D
 

Robbyn-

PHP / Flex Programmierer

AW: einfaches aber sicheres Login-Sript

Ja, so bin ich xD. Das liegt daran, das ich lieber mehr schreibe, und hinterher noch weiß was ich genau gemacht habe, als das ich irgendwas da reinschreibe, was ich eh nicht verstehe. Weil irgendwann muss man da dann was ändern und dann hab ich ein Problem

Ja ok, dann hast du meinen segen, das verstehe ich vollkommen, so kann halt auch nur lernen, anstatt alles per Copy&Paste einzufügen.

Ja, sie sind nur zur Kontrolle. Aber man könnte ja theoretisch 2 Variablen für Benutzernamen machen. 1 die verschlüsselt wird und zur überprüfung dient, und eine andere, die man ausgibt oder so.

Jo, könnte man machen, aber was sollte noch so geheim gehalten werden das es niemand lesen solle?!

Eine weitere Methode wäre halt eben noch eine SSL Verschlüsselung, also für leien anstatt http://website.de -> https://website.de. Dort werden alle Daten verschlüsselt übertragen und können nicht abgefangen werden. Dazu benötigst du allerdings ein SSL Zertifikat (.p12 oder p10) was aber auch etwas Geld kostet. Wäre aber eine der sichersten Methoden.
 

TobiKo

Nicht mehr ganz neu hier

AW: einfaches aber sicheres Login-Sript

Ich würde dir als Tipp mitgeben, Funktionen nochmal zu wiederholen. Oder überhaupt erstmal reinzulesen. Funktionen machen deinen Code viel übersichtlicher, vor allem wenn man die Funktionen in andere Dateien auslagert. So findet man schneller die Fehler und kann auch einzelne Codeabschnitte besser testen und vor allem wiederverwenden.

Gruß Tobi
 

d3mueller

PC-Freak :D

AW: einfaches aber sicheres Login-Sript

Ja, sollte ich vllt mal machen, hast Recht^^.

Habe jetzt das Login-Skript fertig
Code:
include('../dbconnect.inc.php');
$result = $db->query("SELECT * FROM benutzer");
$row = $result->fetch_assoc();


if(isset($_POST['submit'])) {
	
	$name = htmlentities($_POST['name']);
	$pw = htmlentities($_POST['pwd']);
	
	  $secret_salt = "SALT"; // Er ist natürlich anders, aber wäre sinnfrei, ihn hier zu posten^^
    $password = $pw;
    $salted_password = $secret_salt . $password;
	$password_hash = hash('sha512', $salted_password);
	

	
	if($name == $row['name'] && $password_hash == $row['passwort']) {
		$_SESSION['loggedIn'] = true;
		
		header ('Location: menu.php?login=1');
	} else {
		$fehler = true;
	}
}

Ist das so in Ordnung? erst werden die Eingaben entschärft, dann wird das Passwort verschlüsselt und mit dem Passwort aus der Datenbank verglichen.
Noch zum SALT: Kann man da auch alle Sonderzeichen und so verwenden? % & ü ä ö § ! = / und so?

EDIT:
@Robbyn-: sry hab deinen Beitrag übersehen^^
Ja, SSL wäre eine Möglichkeit, aber dafür Geld ausgeben.. hmm. mal schauen^^
Aber danke für den Tipp
 
Zuletzt bearbeitet:

Robbyn-

PHP / Flex Programmierer

AW: einfaches aber sicheres Login-Sript

Ich sehe zwar deine SQL Abfrage nicht, dort durfst du mysql_real_escape_string nicht vergessen, aber ansonsten sieht es ok aus, du könntest den Salt vielleicht noch global definieren, damit du nicht immer einen anderen definieren musst sondern immer gleich ist und von überal aus zugreifbar.

Kann man da auch alle Sonderzeichen und so verwenden? % & ü ä ö § ! = / und so?

Ich würde dir dringend empfehlen soviel Sonderzeichen wie möglich rein zu machen, auch Groß-/Kleinschreibung sowie Zahlen, je kryptischer destso sicherer.
 

d3mueller

PC-Freak :D

AW: einfaches aber sicheres Login-Sript

Danke.

Welche sql-Abfrage meinst du? Ich brauch doch nur die hier, oder?

Code:
$result = $db->query("SELECT * FROM benutzer");
 

Robbyn-

PHP / Flex Programmierer

AW: einfaches aber sicheres Login-Sript

Achso ok, wusste ich nicht, aber versuche so oft wie es geht das bekannte * in einer SQL Abfrage zu vermeiden, versuche nur das auszulesen was du von der Tabelle benötigst, spart Serverzeit und dein Script ist schneller.

Aber in deinem Fall nehme ich mal an willst du wirklich alle Datensätze haben :)
 

TobiKo

Nicht mehr ganz neu hier

AW: einfaches aber sicheres Login-Sript

Grad noch zur Ergänzung mit md5 und salt. Es gibt hash-tabellen, bei denen wirklich 1 Milliarde Datensätze abgespeichert sind. Md5 erzeugt 32byte Strings. Also gibt es 62^32 verschiedene Kombinationen. Wenn der String durch das Salt lange genug ist, bringt auch Brute-Force nichts mehr, da Kollisionen relativ unwahrscheinlich sind. Ich benutze md5 immer mit gutem Gewissen. Sollte mich einer eines Besseren belehren wäre ich dankbar.

Gruß Tobi
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben