wie kann man eine login-page sicher machen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Der erste Schritt wäre der, dass du die Daten des Formulars an deinen Webserver schickst und dort mit einem Programm prüfen lässt. Mit welcher Programmiersprache du das Programm schreiben kannst (sei es PHP, JavaScript, Python, Ruby, o.ä.), hängt davon ab, mit welchem Webserver / welchen Backendtechnologien du arbeitest.

Programmierkenntnisse sind also vonnöten sowie etwas Recherche, was du für deinen Fall nutzen kannst.

Im Folgenden ein einfach gehaltenes Beispiel mit PHP:

<!doctype html>
<head>
  <title>Example</title>
  <meta charset="utf-8">
</head>
<form action="/logincheck.php" method="post">
  <label for="email">Username:</label>
  <input id="email" name="email" type="email">

  <label for="password">Password:</label>
  <input id="password" name="password">

  <input type="submit">
</form>

würde die eingetragenen Daten als Querystring email=...&password=... an die URL https://website-domain/logincheck.php verschicken. In diesem Skript könnte man die Daten nun entgegennehmen und prüfen:

<?php
  if (empty($_POST['email']) || empty($_POST['password'])) {
    header('Location: loginpage.php');
    exit;
  }

  $userPassword = get_user_password_by_mail($_POST['email']);
  
  if (empty($userPassword)) {
    header('Location: loginpage.php');
    exit;
  }

  if (password_verify($_POST['password'], $userPassword)) {
    session_start();
    $_SESSION['user'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
    header('Location: loginarea.php');
  }
  else {
    header('Location: loginpage.php');
  }

Zuerst wird geprüft, ob Daten empfangen wurden. Wenn ja, muss geprüft werden, ob es den angegebenen Nutzer gibt und welches Passwort er hat. Dies würde in diesem Skript die fiktive Funktion get_user_password_by_mail übernehmen. Sie sollte entweder false/einen leeren String bei Misserfolg liefern oder einen Hash.

Speichere Passwörter nie im Klartext. Erstelle stattdessen einen gesalzenen Hash (mit Algorithmen wie bcrypt oder PBKDF2) und speichere diesen. Bei Login wird das gegebene Passwort auf die gleiche Weise in einen Hash konvertiert, danach werden beide Hashes verglichen. Sind sie gleich, wurde das korrekte Passwort angegeben.

Die meisten Webtechnologien verfügen bereits über entsprechende Funktionen zum Erstellen von Hashes. In PHP sind die Funktionen password_hash und password_verify nützlich.

Wenn der Login erfolgreich war, wird eine Session erstellt und in ihr ein Wert hinterlegt, sodass auf Folgeseiten eine Prüfung möglich ist, ob der Nutzer angemeldet ist oder nicht.

<?php
  session_start();

  if (empty($_SESSION['user'])) {
    header('Location: loginpage.php');
    exit;
  }
?>
<!-- html ... -->

Vergiss bei all dem nie, dass Daten, die von außen in dein Programm hineingegeben wurden (in diesem Fall also Nutzername und Passwort), nie zu trauen ist. Filtere/Validiere sie, bevor du sie nutzt/evaluierst (auch dafür gibt es in der Regel schon Funktionen, an die du die Daten lediglich weitergeben musst). Verwende in Kombination mit einer Datenbank bspw. Prepared Statements.

Im Anschluss könnte man weitere Sicherheits- und Komfortmaßnahmen rund um das Formular und Skript ergänzen. Zum Beispiel könnte man Fehlermeldungen implementieren, ein Captcha hinzufügen, usw.. Ein paar Maßnahmen habe ich im unteren Teil dieser Antwort schon einmal aufgezählt.

In deinem HTML Dokument setzt du unter dem form Element noch ein "required". Dadurch musst du das Feld ausfüllen. Falls der user trotzdem submitted prompted der Browser, dass man die Felder ausfüllen muss.

Vielleicht hilft dir das hier weiter : https://www.w3schools.com/php/php_form_required.asp.