Sicherheit und Zugangsdaten
Vorbemerkung
Auf dieser Seite erfahren Sie nicht nur, wie Sie die Sicherheit Ihrer Anwendung von "zac4web" beeinflussen können, sondern auch wie "zac4web" mit Zugangsdaten umgeht und wie gültige Zugangsdaten zugewiesen werden können.
Für die Sicherheit der Anwendungen, die auf "zac4web" basieren, und der Daten, die Sie mit Ihrer Anwendung speichern und verarbeiten, ist allerdings nicht nur der Code von "zac4web" relevant, sondern auch wie jene Personen, die den Status "System-Administrator" und das kritische Redaktionsrecht "php" besitzen, mit ihren Rechten und Zugangsdaten umgehen.
In "zac4web" werden die meisten sicherheitsrelevanten Daten des Systems, die eher statischer Natur sind, in php-Dateien gespeichert und können vielfach von System-Administratoren bei Bedarf formularbasiert verändert werden. Beim direkten Aufruf dieser Dateien über die Adresszeile im Browser oder einen Link, findet eine Umleitung steht, damit der Inhalt dieser Dateien nicht auf diese Weise abgerufen werden kann. "zac4web" kann aber nicht verhindern, dass auf diese Dateien mit dem Datei-Management-System des Servers zugegriffen wird. Damit ist es möglich die Dateien auf jene Weise zu überschreiben, zu löschen oder mit Texteditoren zu verändern. Sicherheitsrelevante dynamische Daten wie die Zugangsdaten speichert das System in Datenbanktabellen. Die Daten in diesen Tabellen können allerdings auch mit Programmen verändert werden, welche die Pflege von MySQL-Datenbanken ermöglichen (z.B. phpMyAdmin).Das bedeutet, dass Sie auch dafür sorgen müssen, die Umgebung, in der Ihre "zac4web"-Anwendung läuft, ausreichend abzusichern, damit keine Angreifer Ihr System gefährden können.
"zac4web" konfigurieren
Das System "zac4web" bietet Ihnen viele Möglichkeiten zur Konfiguration Ihrer Anwendung. Über einige dieser Einstellungen können Sie auch die Sicherheit Ihrer Anwendung beeinflussen.
Eine der wichtigsten Einstellungen für die Sicherheit Ihres Systems ist die Festlegung des Protokolls, welches für den Nachrichtenaustausch zwischen PHP-Server und Browser genutzt werden soll.
Weitere Maßnahmen zur Erhöhung der Sicherheit sind die Veränderung des Verschlüsselungsverfahrens für Benutzernamen, die Veränderung der Vorgaben für Benutzernamen und Passwörter sowie die Veränderung der Felder "user_digit" und "pass_digit".
Zudem können System-Administratoren über die formularbasierte Veränderung der Vorgaben zu Sessions und Reservierungen unter anderem festlegen, wie viele fehlerhafte Login-Versuche maximal zu einem Benutzernamen in einem ebenfalls definierbaren Zeitraum aufeinanderfolgen dürfen, bevor die zeitlich befristete Login-Sperre für diesen Benutzernamen aktiviert wird. Auf diese Weise können Brute-Force-Angriffe wirksam unterbunden werden.
Außerdem können Mitglieder in "zac4web" ihr Mitgliedskonto per Link sperren, wenn Sie der Auffassung sind, dass jemand ihre Session genutzt hat, um ihre E-Mail-Adresse oder den Benutzernamen zu verändern. Wie lange dieser Link gültig ist, kann von den System-Administratoren festgelegt werden. Der Link wird vom System mit den Funktionen mail_zu_benutzername() und mail_email_aendern() verschickt.
Übertragungsprotokoll festlegen
In der Datei "__wm/kern/__konstanten/system.php" können mit den zwei Konstanten "protokoll_normal" und "protokoll_login" das Protokoll festgelegt werden, welches der PHP-Server, auf dem "zac4web" installiert ist, und der Browser, mit dem die Dateien aufgerufen werden, für die Kommunikation verwenden sollen. Für jede der beiden Konstanten muss festgelegt werden, ob das Protokoll "http" oder das Protokoll "https" verwendet werden soll.
Falls Sie das Protokoll "https" generell für den Aufruf Ihrer Seiten nutzen möchten, können Sie in der Datei .htaccess zu Beginn auch folgende Zeilen notieren:
RewriteEngine on
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Durch diese Zeilen erzwingen Sie immer die Auslieferung Ihrer Seiten an den Server per Protokoll "https", selbst wenn der Browser die Seite nur per "http" aufgerufen hat.
Sie sollten in diesem Fall trotzdem der Konstanten "protokoll_login" die Zeichenfolge "https://" zuordnen, damit immer gewährleistet ist, dass Zugangsdaten, die vom Browser zum Server gesendet werden, verschlüsselt übertragen werden.
Beim Protokoll "https" werden die Daten, die vom Browser zum Server und vom Server zum Browser transportiert werden, verschlüsselt übertragen. Dadurch wird es Angreifern, welche die Kommunikation zwischen Browser und PHP-Server abhorchen, erschwert, die eigentlichen Informationen, die zwischen Server und Browser übertragen werden, auszulesen. Durch die Verschlüsselung müssen allerdings beim Protokoll "https" im Vergleich zum Protokoll "http" mehr Daten übertragen werden, um die gleichen Informationen zu senden. Ein erheblicher Nachteil bei der Verwendung des Protokolls "http" im Internet ist allerdings, dass die Kommunikation per "http" von Suchmaschinen und Browsern als "unsicher" eingestuft wird, weil Suchmaschinen und Browser in der Regel nicht differenzieren können, ob die übertragenen Inhalte vertraulich sind oder nicht.
Sie dürfen aber den Konstanten "protokoll_login" und "protokoll_normal" nur dann den Wert "https" zuordnen und per .htaccess die Nutzung des Protokolls "https" erzwingen, wenn der PHP-Server, auf dem "zac4web" laufen soll, tatsächlich die Verschlüsselung erlaubt und Sie ein SSL-Zertifikat dafür besitzen, ansonsten können Ihre Seiten nicht aufgerufen werden und es erscheint eine Warnung im Browser.
Wenn Sie "zac4web" auf einem Server bei einem Hosting-Anbieter im Internet installieren, können Sie meist wählen, ob Sie das Protokoll "https" nutzen möchten oder nicht. Bei manchen Hosting-Angeboten ist die Nutzung des Protokolls "https" kostenlos, bei anderen kostenpflichtig.
Soll "zac4web" auf einem Ihrer eigenen Geräte mit einem PHP-Server (z.B. dem Apache-Server, der in XAMPP enthalten ist) laufen, müssen Sie dafür ein SSL-Zertifikat bereitstellen sowie den PHP-Server und die Browser auf Ihren Rechnern speziell konfigurieren, damit die Seiten von diesen Browsern mit dem Protokoll "https" aufgerufen werden können. Im Internet finden Sie Anleitungen für diese Teilaufgaben.
Für die Mitgliederseiten und alle Seiten, auf denen Zugangsdaten übertragen werden, wird immer das Protokoll verwendet, welches der Konstanten "protokoll_login" zugeordnet ist.
Wenn Sie "zac4web" für Ihre Anwendung im Internet oder einem lokalen Netz nutzen, sollte der Konstanten "protokoll_login" möglichst die Zeichenfolge "https://" und nicht die Zeichenfolge "http://" zugeordnet werden, damit die vertraulichen Informationen auf dem Weg zwischen Browser und Server immer verschlüsselt transportiert werden. Es dient nicht nur der Sicherheit sondern auch Ihrer Reputation. Denn wenn Sie das Protokoll "http" für Seiten verwenden, die ein Eingabefeld vom Typ "passwort" enthalten, warnen die Browser oftmals vor der Eingabe der Daten.
Nutzen Sie dagegen "zac4web" in Kombination mit einem PHP-Server auf einem lokalen Rechner, um Seiten offline zu erstellen und zu testen, bevor Sie diese auf den Server Ihrers Hosting-Anbieters hochladen und können die Seiten, die auf Ihrem Rechner gespeichert sind, von keinem zweiten Gerät per Browser aufgerufen werden, können Sie für die Version auf Ihrem Rechner ohne Bedenken für die Konstante "protokoll_login" statt des Protokolls "https" das weniger aufwändige Protokoll "http" verwenden. Selbst die kritischeren Browser geben in diesem Fall - auch bei Seiten mit Eingabefeldern vom Typ "password" - keine Warnmeldung aus, wenn der Konstanten "zac4web_domain" aus der Datei "__wm/kern/__konstanten/system.php" der Wert "localhost" zugeordnet ist.
Für jede öffentlich zugänglichen Seiten können Sie dagegen wählen, ob ihr der Wert der Konstanten "protokoll_normal" oder der Wert der Konstanten "protokoll_login" als Übertragungsprotokoll zugeordnet ist, Damit ist es möglich, ohne großen Aufwand für den Aufruf der öffentlichen Seiten unterschiedliche Protokolle vorzugeben.
Weil jedoch einige Browser eine Warnmeldung ausgeben, wenn eine Seite, die per "https" aus dem Internet aufgerufen wurde, einen internen Link enthält, welcher das Protokoll "http" vorschreibt, ergänzt "zac4web" für alle internen Links innerhalb einer Seite, die per "https" aufgerufen wurde, das Protokoll "https", sofern dem Link von der Person, welche den Link in die Datei oder Datenbanktabelle eingepflegt hat, nicht explizit das Protokoll "http" zugeordnet wurde. Diese Umwandlung führt dann allerdings dazu, dass beim Surfen innerhalb der Anwendung oft auch jene öffentlichen Seiten per "https" aufgerufen werden, denen im Rahmen der Redationstätigkeiten das Protokoll "http" zugeordnet wurde. Der Nachteil durch die Erhöhung der Datenmenge wird aber dadurch kompensiert, dass die Warnmeldungen ausbleiben, die beim Aufrufer der Seite ansonsten leicht das Gefühl entstehen lassen könnten, die Seite sei unsicher.
Zugangsdaten
Gültige Zugangsdaten bestehen immer aus einem Benutzernamen und einem Passwort. Benutzername und Passwort können für das Einloggen nur dann genutzt werden, wenn sie in den richtigen Datenbanktabellen korrekt verschlüsselt gespeichert sind und in der Tabelle _bereich_home_personen die Verweise zu diesen Datenbanktabellen notiert sind.
Durch die Veränderung der Inhalte in den Kerndateien "__wm/kern/__variablen/user_pass.php" und "__wm/kern/__konstanten/user_pass.php" und den Dateien "__wm/__konstanten/user_vorgaben.php", "__wm/__konstanten/pass_vorgaben.php" und "__wm/_admin/__funktionen/user_pass_aendern.php" wird gesteuert, wie die Zeichenfolgen für Benutzernamen und Passwörtern aufgebaut sein dürfen/müssen und in welchen Tabellen die Zugangsdaten gespeichert werden.
Die Namen für Tabellen, in denen Benutzernamen gespeichert werden, beginnen immer mit der Zeichenfolge "___u". Und die Namen der Passworttabellen beginnen immer mit der Zeichenfolge "___p". Danach folgt immer eine Zahl aus der Menge der ganzen Zahlen von 0 bis 99. Es können daher bis zu 100 Datenbanktabellen mit Benutzernamen und bis zu 100 Datenbanktabellen mit Passwörtern vorhanden sein. Wie die Zuordnung der Benutzernamen und Passwörtern zu den Datenbanktabellen gesteuert wird, enthält der Abschnitt Wortwerte für Benutzernamen und Passwörtern.
Die Hinweise "manuelle Korrektur" / "manuelles Umbenennen" und ähnliche Formulierungen mit dem Wort "manuell" im nachfolgenden Text, bedeuten, dass die Änderungen nicht mit Systemformularen ausgeführt werden können. Wenn Aktionen auf Datenbanktabellen nötig sind, ist in diesen Fällen ein Zugriff auf die MySQL-Datenbank mit einem Programm wie phpMyAdmin erforderlich. Manuelle Veränderungen von Dateien sollten mit einem Texteditor durchgeführt werden.
Formulare mit Eingabefeldern für Zugangsdaten
Damit Benutzername und Passwort nicht in einer einzigen Nachricht vom Browser zum Server transportiert werden, sind für jeden Login-Versuch zwei Skriptaufrufe erforderlich. Mit dem ersten Formular muss der Benutzername übermittelt werden. Die erhaltene Information speichert das System auf dem Server und gibt anschließend das Formular für das Senden des Passworts aus. Über die Identifikationsnummer in dem Session-Cookie wird nach dem Erhalt des Passworts die Verknüpfung zwischen den beiden Eingaben hergestellt.
Die Eingabefelder für Benutzername und Passwort werden auf zwei Formulare verteilt, um das Risiko zu vermindern, dass beide Zugangsdaten während des Login-Versuchs über einen jener Server, welche die Nachrichten im Internet weiterleiten, in die Hände eines Angreifers fallen. Der Angreifer müsste dafür beide Nachrichten abfangen. Aus dem gleichen Grund werden auch in den Fällen, in denen ein Mitglied seine E-Mail-Adresse und seinen Benutzernamen übermitteln muss, zwei Formulare eingesetzt. Denn wenn eine Person über diese beiden Informationen verfügt und auf die Nachrichten, die an diese E-Mail-Adresse geschickt werden, zugreifen kann, kann die Person mit dem Formular "Passwort holen" auch an ein gültiges Passwort für das Mitgliedskonto gelangen und hat dann Zugriff auf das System.
Wenn im Browser kein Javascript aktiviert ist, werden die Eingaben für Benutzername und Passwort in den Systemformularen immer nur verborgen angezeigt. Um aber den Aufrufern der Formulare die Kontrolle ihrer Eingabe zu ermöglichen, bietet das System mit den beiden Funktionen "eingabe_zeigen()" und "eingabe_verbergen()" in der Datei "__wm/__javascript/wechseln_password_text.js" die Möglichkeit zwischen der Klardarstellung und der Punktdarstellung zu wechseln, wenn Javascript im Browser aktiviert ist.
Wir gehen davon aus, dass die Möglichkeit, sich die Eingaben in Klardarstellung anzeigen zu lassen, die Sicherheit einer Anwendung nicht gefährdet, sondern eher erhöht. Wir vermuten, dass durch die Kontrollmöglichkeit die Bereitschaft steigt, auch längere und kompliziertere Zeichenfolgen als Benutzernamen und Passwort zu verwenden. Denn es sinkt das Risiko, eine falsche Zeichenfolge zu senden. Dies ist insbesondere dann relevant, wenn "zac4web" so konfiguriert wurde, dass eine Login-Sperre schon nach wenigen Fehlversuchen eintritt.
Falls Sie jedoch nicht möchten, dass die Nutzer Ihrer Anwendung sich die Eingaben in der Klardarstellung anzeigen lassen können, brauchen Sie nur die Befehle aus den beiden Funktionen zu entfernen. Die Datei und die Funktionen selber sollten erhalten bleiben.
Wortwerte für Benutzernamen und Passwörtern
Der Wortwert für einen Benutzernamen ist ebenso wie der Wortwert für ein Passwort immer ein Integerwert zwischen 0 und 99. Dieser Integerwert kennzeichnet die Datenbanktabelle, in welcher dieser Benutzername bzw. das Passwort zu speichern ist oder gespeichert sein könnte. Die Namen für die Datenbanktabellen in denen Benutzternamen gespeichert werden, beginnen immer mit der Zeichenfolge "___u" und enden mit dem Wortwert (z.B. "___u33", "___u0"). Die Namen der Datenbanktabellen für Passwörter werden analog gebildet, allerdings enthalten diese statt des Buchstabens "u" den Buchstaben "p".
Weil die Benutzernamen und Passwörter auf bis zu 100 Datenbanktabellen verteilt gespeichert sein können, wird in der Datenbanktabelle "_bereich_home_personen" für jedes Mitglied gespeichert, in welcher Datenbanktabelle sein Benutzername und sein Passwort gespeichert ist. Diese Informationen ermöglichen die Prüfung, ob übermittelte Zeichenfolge für den Benutzernamen oder das Passwort auch die aktuell gültigen Zeichenfolgen sind, falls aufgrund von Fehlfunktionen oder Manipulationen in verschiedenen Datenbanktabellen mit Benutzernamen oder Passwörtern Datensätze für ein Mitglied gespeichert sein sollten.
Die Kerndatei "__wm/kern/__variablen/user_pass.php" enthält die zwei eindimensionalen numerischen Felder "user_digit" und "pass_digit". In diesen Feldern sind beginnend beim Index 0 fortlaufend jene Zeichen eingetragen, die benötigt werden, um den Wortwert für eine Zeichenfolge, die als Benutzernamen bzw. als Passwort übermittelt wurde, zu berechnen. Die Felder "$user_digit" und "$pass_digit" werden auch eingesetzt, wenn zu einem zufällig ausgewählten Wortwert ein Benutzernamen bzw. ein Passwort erstellt werden soll.
Berechnung des Wortwertes zu einer Zeichenfolge
Bei jedem Login-Versuch muss ein Benutzer zuerst per Formular den Benutzernamen und danach das Passwort an den Server übermitteln. Auch bei einigen besonders kritischen Aktionen muss der Aufrufer den Befehl durch die Eingabe des Passwortes oder des Benutzernamens bestätigen.
Wenn z.B. bei einem Login-Versuch als Benutzername die Zeichenfolge T*4und23:L eingegeben wird, wandelt das System für diese Ermittlung die enthaltenen Kleinbuchstaben in Großbuchstaben um, also zu T*4UND23:L. Danach ermittelt das System für jedes einzelne dieser Zeichen den Index innerhalb des Feldes user_digit und addiert die Werte z.B.: 24 + 50 + 2 + 25 + 19 + 11 + 0 + 1 + 38 + 44 = 214. Auf diese Summe wird dann die Division durch 100 mit Rest angewandt. Der Rest 14 ist dann der Wortwert für den Benutzernamen und kennzeichnet die Datenbanktabelle ___u14 für diesen Benutzernamen.
Bei einem Login-Versuch prüft das System dann als erstes, ob in der Datenbanktabelle "___u14" tatsächlich ein Datensatz mit dem Benutzernamen "T*4und23:L" gespeichert ist. Für die Prüfung wird die eingegebene Zeichenfolge mit der PHP-Funktion hash() verschlüsselt. Falls ein passender Datensatz gefunden wird, liest das System die Identifikationsnummer des Mitgliedskontos aus, dem dieser Benutzername zugeordnet ist. Anschließend wird geprüft, ob in der Datenbanktabelle "_bereich_home_personen" für die Person mit der ermittelten Identifikationsnummer tatsächlich notiert ist, dass der Benutzername in der Tabelle "___u14" gespeichert sein soll. Nur wenn auch das zutrifft, wird im Anschluss geprüft, ob die erhaltente Zeichenfolge für das Passwort auch das korrekte Passwort ist.
Für Passwörter ist die Ermittlung des Wortwertes fast identisch, allerdings werden dazu die Indizes aus dem Feld $pass_digit verwendet und es entfällt die Umwandlung der Kleinbuchstaben in Großbuchstaben. Nach der Ermittlung des Wortwertes wird jedoch zuerst anhand der Tabelle "_bereich_home_personen" geprüft, ob der Wortwert zu der Datenbanktabelle passt, in der das gültige Passwort stehen soll. Nur wenn das zutrifft, wird in der zuvor ermittelten Datenbanktabelle nachgeschlagen, ob dort ein Datensatz zu der ermittelten Identifikationsnummer enthalten ist. Falls ja, wird geprüft, ob die eingegebene Zeichenfolge zu dem gespeicherten Passwort passt.
Gibt ein Benutzer sein Passwort oder seinen Benutzernamen zur Bestätigung einer Aktion ein, so ist dem System zu diesem Zeitpunkt die Identifikationsnummer des Mitglieds bekannt. In diesem Fall geht das System sowohl bei der Prüfung der Eingabe für den Benutzernamen als auch für das Passwort so vor, wie es bei dem Login-Versuch für die Prüfung des Passwortes beschrieben ist. Es wird also der Wortwert ermittelt, dann verglichen, ob dieser Wortwert zu dem gespeicherten Namen der Datenbanktabelle passt, und falls das zutrifft, ob ein passender Datensatz in der ermittelten Datenbanktabelle enthalten ist.
Und wenn ein Mitglied seinen Benutzernamen ändern möchte, ermittelt das System anhand des Wortwertes für die erhaltene Zeichenfolge in welcher Datenbanktabelle der neue Benutzername zu speichern ist. Aufgrund der Informationen in dem Datensatz des Mitglieds in "_bereich_home_personen" weiß das System, aus welcher Datenbanktabelle es den Datensatz für den bisher verwendeten Benutzernamen löschen muss. Das System ersetzt in der Datenbanktabelle "_bereich_home_personen" den Hinweis auf die Datenbanktabelle mit dem Benutzernamen und speichert den neuen Benutzernamen in der zugehörigen Tabelle.
Bei einer Änderung des Passwortes geht das System analog dazu vor.
Felder "user_digit" und "pass_digit" ändern
Die Indizes für die Zeichen in den Feldern "user_digit" und "pass_digit" können manuell geändert werden.
Eine Änderung kann aus folgenden Gründen nötig oder sinnvoll sein:
- Sie wollen zusätzliche Zeichen für Benutzernamen und Passwörter erlauben.
- Bisher enthaltene Zeichen sollen nicht mehr verwendet werden dürfen.
- Durch eine andere Reihenfolge der Zeichen in den Feldern soll verhindert werden, dass Angreifern, die Zugangsdaten aus einem anderen System, welches auf "zac4web" basiert, erbeutet haben, per Vergleich die Zugangsdaten aus Ihrem System entschlüsseln können. Denn durch die andere Reihenfolge ergeben sich in den zwei Systemen wahrscheinlich andere Wortwerte für identische Benutzernamen bzw. Passwörter. Das führt zum einen für Benutzernamen und Passwörtern zu anderen Speicherorten und für Benutzernamen aufgrund des Verschlüsselungsverfahrens, zu anderen gespeicherten Zeichenketten, da bei der Verschlüsselung der Benutzernamen auch der Wortwert berücksichtigt wird.
Allerdings muss bei der Änderung dieser Felder Folgendes beachtet werden:
- Die Indizes in den Feldern müssen immer bei 0 beginnen und fortlaufend sein.
- Die Zeichen, die vom System für die automatische Erstellung von Benutzernamen und Passwörtern verwendet werden dürfen, müssen immer als erstes in diesen Feldern notiert sein.
- Wenn zusätzliche Datensätze mit Zeichen an die Felder anghängt werden, hat dieses keine Auswirkung auf die Zuordnung der vorhandenen Zugangsdaten zu Datenbanktabellen.
- Wird jedoch die Reihenfolge der vorhandenen Zeichen in den Feldern $user_digit und $pass_digit geändert oder werden neue Zeichen zwischen die vorhandenen Zeichen geschoben, ändert sich mindestens für einige Zeichen der Indexwert. Diese Änderung führt dann höchstwahrscheinlich zu anderen Werten, wenn zu einer Zeichenfolge der Tabellenname ermittelt werden soll. Der Benutzername T*4und23:L wird dann vom System u.U. nicht mehr der Datenbanktabelle ___u14 sondern der Datenbanktabelle ___u57 zugeordnet. Benutzernamen und Passwörter, die vor der Änderung der Felder "user_digit" und "pass_digit" gespeichert wurden, können daher u.U. nach der Änderung nicht mehr vom System gefunden werden. Diese Zugangsdaten würden damit ungültig.
- Wenn die Benutzernamen und Passwörter verschlüsselt gespeichert werden (Regelfall), können Sie anhand der gespeicherten Zeichenfolgen nicht ermitteln, in welcher Datenbanktabelle der zugehörige Benutzername/das zugehörige Passwort nach der Änderung gespeichert werden müsste. Den Tabellennamen können Sie nur dann ermitteln, wenn Ihnen der Benutzername bzw. das Passwort bekannt ist.
- Sofern zum Zeitpunkt der Änderung nur für ein Personenkonto Zugangsdaten vorhanden und bekannt sind, können die bisherigen Datensätze für Benutzername und Passwort für das System manuell leicht reaktiviert werden, indem die Datenbanktabellen manuell umbenannt und die Tabellenverweise in den Spalten `u` und `p` in _bereich_home_personen manuell korrigiert werden.
- Sobald allerdings mehrere Benutzernamen / Passwörter gespeichert sind, kann zusätzlich eine Verschiebung der Datensätze erforderlich werden. In diesem Fall ist es meist einfacher, nur die beiden Datenbanktabellen, in denen die bekannten Zugangsdaten für ein Konto mit System-Administratorrechten stehen, manuell umzubenennen und die Tabellenverweise in der Datenbanktabelle für diesen Benutzer manuell zu korrigieren. Danach sollten die Tabellen mit den Zugangsdaten formularbasiert bereinigt werden (Zugangsdaten bereinigen) und im Anschluss allen anderen Mitgliedern formularbasiert neue Zugangsdaten zugewiesen werden (vgl. Zugangsdaten zuweisen).
- Eine Änderung der Felder "user_digit" und "pass_digit" erzwingt u.U. auch eine manuelle Anpassung der Konstanten in der Datei "__wm/kern/__konstanten/user_pass.php". Die Kommentare innerhalb der beiden Dateien ""__wm/kern/__variablen/user_pass.php" und "__wm/kern/__konstanten/user_pass.php" enthalten die entsprechenden Informationen dazu.
Vorgaben für Benutzernamen und Passwörter
In der System-Datei "__wm/kern/__konstanten/user_pass.php" sind die Mengen der Zeichen notiert, die für Benutzernamen und Passwörtern verwendet werden dürfen. Dabei unterscheidet das System zwischen den Zeichensätzen für Benutzernamen bzw. Passwörtern, die automatisch erzeugt werden und den Zeichensätzen für Benutzernamen bzw. Passwörtern, die von Mitgliedern gewählt werden.
Die Zeichenmengen, die bei der automatischen Erzeugung von Benutzernamen und Passwörtern verwendet werden, müssen eine Teilmenge der Zeichenmengen sein, aus denen Mitglieder die Zeichen für den Benutzernnamen bzw. das Passwort auswählen können, weil sich ansonsten u.U. ein Mitglied mit den automatisch zugewiesenen Zugangsdaten nicht anmelden kann.
In den Zeichenmengen für die automatische Erzeugung von Zugangsdaten sollten jene Zeichen fehlen, die optisch leicht verwechselt werden können (z.B. Ziffer "0" und Buchstabe "O"). In den Zeichenmengen, aus denen die Benutzer für ihre Zugangsdaten auswählen können, dürfen jene Zeichen dagegen enthalten sein.
Die Zeichenmenge für automatisch erzeugte Benutzernamen darf wegen des Verfahrens zur automatischen Zuweisung von Benutzernamen keine Kleinbuchstaben enthalten. Und die Zeichenmenge, aus denen Mitglieder für ihre Benutzernamen Zeichen auswählen können, muss aus dem gleichen Grund zu jedem Großbuchstaben, der für die automatische Erzeugung verwendet werden kann, auch den zugehörigen Kleinbuchstaben enthalten.
Damit das System Benutzernamen von Passwörtern eindeutig unterscheiden kann und kein Mitglied für Benutzername und Passwort die gleiche Zeichenfolge verwenden kann, muss die Zeichenmenge für die automatische Erzeugung von Passwörtern mindestens ein Zeichen enthalten, welches Mitglieder nicht für ihren Benutzernamen verwenden dürfen. Wenn nur ein Zeichen, diese Bedingungen erfüllt, ist genau dieses Zeichen der Konstanten "passwort_zeichen" in der Datei "__wm/__konstanten/pass_vorgaben.php" zuzuweisen. Falls mehr Zeichen zur Unterscheidung verwendet werden können, kann ausgewählt werden, welches dieser Zeichen der Konstanten "passwort_zeichen" zugeordnet wird. Besonders einfach ist die Zuordnung des Zeichens für "passwort_zeichen", wenn die Vorgaben für Passwörter formularbasiert verändert werden.
Mit den Funktionen in der Datei "__wm/_admin/__funktionen/user_pass_aendern.php" können zusätzliche Vorgaben für Benutzernamen und Passwörter festgelegt werden. Diese Vorgaben gelten zwar nicht für automatisch erzeugte Benutzernamen und Passwörter, sondern nur für Benutzernamen und Passwörter, welche sich ein Mitglied selber zuweist. Jedoch fordert das System Mitglieder bei jedem Login-Versuch auf, seinen Benutzernamen bzw. sein Passwort zu ändern, solange das Mitglied automatisch einen erzeugten Benutzernamen bzw. ein automatisch erzeugtes Passwort verwendet.
Verschlüsselung der Zugangsdaten
Weil bei der Verwendung des Systems "zac4web" das Vorgehen, wie Zugangsdaten erzeugt und gespeichert werden, prinzipiell immer identisch ist, sollten die Zugangsdaten innerhalb von "zac4web" unbedingt jeweils nach dem aktuellsten Stand der Technik verschlüsselt gespeichert werden, damit Angreifer, die sich einen Zugriff zu den Datenbanktabellen mit den Zugangsdaten verschaffen, die Zeichenfolgen aus diesen Datenbanktabellen möglichst nicht nutzen können.
Für Passwörter wird in der Datei "__wm/_admin/__funktionen/login.php" mit den Funktionen passwort_verschluesseln() und passwort_pruefen() festgelegt, wie die Passwörter zu verschlüsseln sind und wie geprüft werden kann, ob eine übermittelte Zeichenfolge das korrekte Passwort für den jeweiligen Benutzer ist. Das Verschlüsselungsverfahren und das Prüfverfahren können bei Bedarf von den System-Administratoren angepasst werden. Wenn allerdings die Funktion zum Verschlüsseln der Passwörter geändert wird, werden die bisher gespeicherten Passwörter im Allgemeinen ungültig. Sofern ein Mail-Server aktiv ist, können sich die Mitglieder, für die eine E-Mail-Adresse notiert ist, mit dem System-Skript Passwort holen ein neues Passwort zusenden lassen. Für die anderen Mitglieder muss innerhalb der Mitgliederverwaltung der Befehl Zugangsdaten zuweisen aufgerufen werden, damit für diese Mitgliedskonten wieder gültige Zugangsdaten gespeichert sind.
Für die Verschlüsselung von Benutzernamen wird die einfachere PHP-Funktion "hash()" eingesetzt und nicht die PHP-Funktion "password_hash()", weil die Verschlüsselung mit "password_hash()" bei vielen registrierten Mitglieder zu einem um ein Vielfaches höheren Rechenaufwand bei jedem Login-Versuch führen würde. Der Verschlüsselungsalgorithmus kann bei Bedarf geändert werden. (vgl. Verschlüsselungsverfahren für Benutzernamen ändern )
Verschlüsselungsverfahren für Benutzernamen ändern
Das Verschlüsselungsverfahren für Benutzernamen sollte nur formularbasiert geändert werden, weil das System dann dem System-Administrator, der diese Änderung ausführt, und sämtlichen Mitgliedern, für die eine E-Mail-Adresse eingetragen ist, automatisch neue Benutzernamen zuweist. Mitgliedern, für die keine E-Mail-Adresse eingetragen ist, müssen im Anschluss an die Änderung im Rahmen der Mitgliederverwaltung neue Zugangsdaten zugewiesen werden, damit auch diese wieder gültige Zusatzdaten besitzen.
Die System-Administratoren können wählen, mit welchem Verschlüsselungsalgorithmus die php-Funktion hash() Benutzernamen für die Speicherung verschlüsseln soll. Das System-Formular bietet dem System-Administrator nur die Verschlüsselungsalgorithmen an, welche von der PHP-Version unterstützt werden, die auf dem Server läuft, auf dem "zac4web" installiert ist. Es sollte nur ein Verschlüsselungsalgorithmus gewählt werden, der als sicher eingestuft ist. Weil bei jeder Änderung des Verschlüsselungsalgorithmus sämtliche Benutzernamen ersetzt werden müssen, empfiehlt es sich, diesen nur zu ändern, wenn es aus Sicherheitsgründen erforderlich ist.
Damit die Verschlüsselung anwendungsspezifischer wird und das Entschlüsseln der Benutzernamen mit sogenannten Rainbow-Tabellen noch stärker erschwert wird, sollten die System-Administratoren zusätzlich eine beliebige Zeichenfolge festlegen, um welche sämtliche Benutzernamen vor der Verschlüsselung mit der php-Funktion hash() ergänzt werden. Weil auch bei der Änderung der Zeichenfolge alle vorhandenen Benutzernamen ungültig werden und durch neue Benutzernamen ersetzt werden müssen, sollte die Zusatzzeichenfolge außer im Rahmen der Insallation nur dann ersetzt werden, wenn es nötig ist.
Zugangsdaten zuweisen
Das Zuweisen von Zugangsdaten im Rahmen der Mitgliederverwaltung ist immer dann erforderlich, wenn ein Mitglied seinen Benutzernamen vergessen hat, sein Konto gesperrt hat, bei der Veränderung des Verschlüsselungsverfahrens für Benutzernamen nicht automatisch einen neuen Benutzernamen erhalten hat oder aufgrund einer Fehlfunktion oder Manipulation keine gültigen Zugangsdaten für ein Mitgliedskonto vorliegen.
Dabei erzeugt das System für das Mitglied sowohl einen neuen Benutzernamen als auch ein neues Passwort. Sofern in der Datenbanktabelle "_bereich_home_personen" im Datensatz für das Mitglied notiert ist, in welchen Datenbanktabellen bisher seine Zugangsdaten gespeichert waren, werden die Datensätze mit den alten Zugangsdaten gelöscht.
Als erstes wählt das System eine Zufallszahl zwischen 0 und 99 als Wortwert für den Benutzernamen aus. Danach erzeugt es eine Zufallszeichenkette, die genau diesen Wortwert aufweist und die Regeln des Systems an Benutzernamen erfüllt. Die anwendungsspezifischen Regeln, die in der Funktion "hp_user_regeln_anwenden()" in der Datei "__wm/_admin/__funktionen/user_pass_aendern.php" notiert sind, werden dabei allerdings nicht berücksichtigt, weil dieses zu einem deutlich höheren Aufwand bei der Erstellung der Zufallszeichenkette für den Benutzernamen führen könnte. In dem Datensatz mit dem Benutzernamen wird immer auch eine verschlüsselte Variante gespeichert, in der sämtliche enthaltenen Kleinbuchstaben in Großbuchstaben notiert sind. Diese zweite Zeichenkette wird benötigt, damit das System verhindern kann, dass zwei Benutzernamen sich nur durch Groß- und Kleinschreibung unterscheiden.
Danach wird analog eine Zufallszeichenkette für das Passwort erzeugt.
Passwort holen
Wenn bei einem Login-Versuch falsch Zugangsdaten eingegeben wurden, wird anschließend zusätzlich zum Formular zur Eingabe des Benutzernamens das Formular "Passwort holen" angezeigt.
In zwei aufeinander folgendn Formularen muss das Mitglied seine E-Mail-Adresse und seinen Benutzernamen übermitteln. Nachdem das System die Eingaben erhalten hat, prüft es zunächst, ob es ein gültiger Benutzername ist. Falls ja, wird dann kontrolliert, ob die übermittelte E-Mail-Adresse mit jener E-Mail-Adresse übereinstimmt, die dem Benutzernamen zugeordnet ist. Nur wenn auch das gegeben ist, erzeugt das System ein neues zufälliges Passwort und weist dieses dem Mitgliedskonto zu. Bei der Erstellung dieses Passwortes werden allerdings nicht die anwendungsspezifischen Regeln aus der Funktion hp_pass_regeln_anwenden() aus der Datei __wm/_admin/__funktionen/user_pass_aendern.php angewendet.
Danach versucht das System eine Nachricht mit dem neuen Passwort an die E-Mail-Adresse zu versenden. Der Versand funktioniert allerdings nur, wenn vom System E-Mails verschickt werden können, also ein funktionsfähiger Mail-Server vorhanden ist.
Sobald sich das Mitglied mit diesem Passwort erfolgreich eingeloggt hat, wird ihm das Formular zur Änderung des Passwortes angeboten. Das Mitglied kann zwar dieses Formular schließen, ohne das Passwort zu ändern. Aber dann wird ihm solange jedes Mal beim Einloggen das Formular "Passwort ändern" angezeigt, bis das Mitglied sein Passwort geändert hat. Falls in der Funktion hp_pass_regeln_anwenden() Regeln definiert sind, welche Passwörter zusätzlich zu den vom System vorgegebenen Regeln (Mindestlänge, Maximallänge, Passwort-Zeichen) erfüllen müssen, wird das neue Passwort nur akzeptiert, wenn es auch diese Regeln erfüllt.
Zugangsdaten bereinigen
Bei der Bereinigung der Zugangsdaten entfernt das System aus den Datenbanktabellen mit den Zugangsdaten alle Datensätze zu denen keine entsprechenden Verweise für die Zugangsdaten der Mitglieder gespeichert sind. Falls die Datenbanktabellen nach der Bereinigung leer sind, werden sie gelöscht.
Das Verfahren zur Bereinigung der Zugangsdaten kann von den System-Administratoren aufgerufen werden, wenn sie die Datenbanktabellen entfernen möchten, die in der Vergangenheit einmal Datensätze zu Zugangsdaten enthalten haben, mittlerweile aber leer sind, weil die Mitglieder mittlerweile Zusatzdaten besitzen, die in anderen Datenbanktabellen gespeichert werden oder die Mitgliedskonten gelöscht bzw. in reine Personenkonten umgewandelt wurden.
Wichtiger ist das Verfahren zur Bereinigung der Zugangsdaten, wenn Daten manipuliert worden sind oder aufgrund von Fehlfunktionen bei der Erzeugung oder dem Löschen von Zugangsdaten überflüssige oder fehlerhafte Datensätze entstanden sind. Diese Datensätze stellen zwar kein Sicherheitsrisiko dar, weil sie nicht für die Anmeldung genutzt werden können. Falls das System überflüssige Datensätze feststellt, schlägt es den System-Administratoren u.U. per E-Mail vor, die Zugangsdaten zu bereinigen.
Notfallmaßnahmen - System-Administrator-Konto
Falls für das eigene System-Administrator-Konto "eSK" keine gültigen Zugangsdaten mehr vorhanden oder bekannt sind, hängt der Umfang der erforderlichen Maßnahmen, zur Reaktivierung dieses Kontos davon ab, ob für mindestens ein anderes Konto gültige Zugangsdaten bekannt sind oder nicht.
Auf den ersten Blick erscheint es Ihnen vielleicht problematisch, dass hier auch detaillierte Hinweise zur Manipulation der Zugangsdaten veröffentlicht werden. Aber weil der Quellcode von "zac4web" offen und umfangreich dokumentiert ist, können potentielle Angreifer aus diesem Code die Funktionsweise von "zac4web" ableiten. Außerdem kann nicht ausgeschlossen werden, dass durch eine Fehlfunktion der Umgegung, in der "zac4web" installiert ist, Datenkonflikte bei den Zugangsdaten entstehen oder veränderte Zugangsdaten nicht mitgeteilt werden können. Also erscheint es nur sinnvoll, wenn auch die Nutzer von "zac4web", die nicht über die nötigen Code-Kenntnisse verfügen, die Funktionsweise erfahren, um bei Bedarf erforderliche Korrekturen ausführen zu können.
Fall 1: Für ein anderes System-Administrator-Konto "aSK" sind gültige Zugangsdaten bekannt
Dies ist der einfachste Fall, weil dann eine Anmeldung am System mit dem System-Administrator-Konto "aSK" erfolgen kann. Da jeder System-Administrator jedes andere Personenkonto über die Mitgliederverwaltung vollumfänglich bearbeiten darf, können nach der Anmeldung als "aSK" dem Konto "eSK" neue Zugangsdaten zugewiesen werden.
Fall 2: Es sind nur noch die gültigen Zugangsdaten für ein Mitglieds-Konto "eMK" bekannt, das keine System-Administrator-Rechte besitzt
In diesem Fall muss zunächst manuell eine Veränderung an der Datenbanktabelle "_bereich_home_personen" erfolgen. Dazu ist ein Zugriff auf die Datenbank mit einem Programm wie "phpMyAdmin" erforderlich. Sobald der Zugriff hergestellt wurde, sind als erstes aus der Datenbanktabelle "__personen" aus der Spalte `person_ID` die Identifikationsnummer für das Personenkonto "eMK" und aus der Datenbanktabelle "_login_rechte" der Wert aus der Spalte `rechte_ID` für den Datensatz mit dem Wert 'admin' in der Spalte `name` auszulesen. Danach ist in der Datenbanktabelle "_bereich_home_personen" für den Datensatz, welcher in der Spalte `person_ID` die zuvor ermittelte Identifikationsnummer besitzt, manuell der Wert in der Spalte `recht` auf den Zahlenwert zu setzen, der aus der Spalte `rechte_ID` ermittelt wurde. Danach kann der Zugriff auf die Datenbank beendet werden.
Nachdem dem Konto "eMK" auf diese Weise System-Administrator-Rechte zugewiesen wurden, kann eine Anmeldung mit den Zugangsdaten für das Konto "eMK" erfolgen. Weil dieses Konto nun über System-Administrator-Rechte verfügt, können bei der Anmeldung mit den Zugangsdaten des Kontos "eMK" dem Konto "eSK" neue Zugangsdaten zugewiesen werden.
Soll im Anschluss das Konto "eMK" den Status "System-Administrator" wieder verlieren, muss ein Logoff für das Konto "eMK" erfolgen und danach eine Anmeldung mit den neuen Zugangsdaten für "eSK". Weil dieses Konto nun wieder System-Administrator-Rechte besitzt, kann nach der Anmeldung mit den Zugangsdaten des Kontos "eSK" über die Mitgliederverwaltung dem Konto "eMK" das System-Administrator-Recht formularbasiert entzogen werden.
Fall 3: Es sind für kein Konto gültige Zugangsdaten bekannt
In diesem Fall muss nicht nur mit einem Programm wie "phpMyAdmin" manuell auf die Datenbanktabelle zugegriffen werden, sondern auch lesend auf verschiedene Dateien. Auf die Dateien kann nur über ein Datei-Management-System des Servers zugegriffen werden, auf dem das System "zac4web" gespeichert ist, oder per FTP-Client.
Im ersten Schritt sind in mehreren Teilschritten zwei verschlüsselte Versionen für einen Benutzernamen zu erzeugen:
- Anhand der Vorgaben in der Datei "__zac4web/__konstanten/user_pass" ist eine Zeichenfolge für den Benutzernamen (B) festzulegen. Der Benutzername darf nur Zeichen aus der Konstanten "user_zeichen_erlaubt_pruefung" enthalten. Die Zeichenfolge muss mindestens "user_system_min" und darf höchstens "user_system_max" Zeichen lang sein und darf nicht nur aus Ziffern bestehen. Außerdem darf die Zeichenfolge nicht das Zeichen enthalten, welches in der Datei "__zac4web/__konstanten/user_pass" der Konstanten "passwort_zeichen" zugeordnet ist, und weder mit einem Leerzeichen beginnen noch mit einem Leerzeichen enden. (z.B. B = Gw9M-D3Nd)
- Nachdem die Zeichenfolge B für den Benutzernamen feststeht, muss die Zeichenfolge BG erstellt werden. Dies geschieht, indem zunächst eine Kopie der Zeichenfolge von B erzeugt wird und danach in dieser Kopie sämtliche enthaltenen Kleinbuchstaben durch den zugehörigen Großbuchstaben ersetzt werden (im Beispiel: BG = GW9M-D3ND)
- Nun muss ermittelt werden, in welcher Datenbanktabelle der Benutzername zu speichern ist. Dazu muss anhand des Feldes "$user_digit" aus der Datei "__wm/kern/__variablen/user_pass.php" der Wortwert WB für diesen Benutzernamen berechnet werden. Hinweise zum Berechnungsverfahren und zur Bildung des Tabellennamens TB finden sich im Abschnitt Wortwerte für Benutzernamen und Passwörtern.(z.B. WB = 57 und TB = ___u57)
- Aus der Datei "__wm/__konstanten/user_vorgaben.php" ist die Zeichenfolge ush zu ermitteln, die der Konstanten "user_hash_salt" als Wert zugeordnet ist. Sofern in ush die Zeichenfolge \' notiert ist, ist das Zeichen \, welches unmittelbar vor dem Zeichen ' steht, zu entfernen. Falls die Zeichenfolge \\ enthalten ist, muss eines der beiden \ gelöscht werden. Von Teilzeichenfolgen, die aus eimem Vielfachen von \\ bestehen, sind jeweils die Hälfte der enthaltenen Zeichen \ zu löschen. Der Wert für "user_hash_salt" innerhalb der Datei "__wm/__konstanten/user_vorgaben.php" darf allerdings nicht verändert werden.(z.B. "user_hash_salt" = #4%@9\'\\\\| umformen zu ush = #4%@9'\\|
- Für das Verschlüsseln mit der PHP-Funktion hash() wird neben den beiden Versionen des Benutzernamen B und BG, dem Wortwert für den Benutzernamen WB sowie dem Wert von ush der Name des Verschlüsselungsalgorithmus benötigt. Der Name des Verschlüsselungsalgorithmus ist in der Datei "__wm/__konstanten/user_vorgaben" der Konstanten "user_hash_algo" als Wert zugeordnet. (z.B. user_hash_algo = sha512)
- Aus den Zeichenfolgen für WB, ush und B wird eine fortlaufende Zeichenkette gebildet, indem die Teilzeichenfolgen in genau dieser Reihenfolge aneinandergehängt werden (im Beispiel 57#4%@9'\\|Gw9M-D3Nd . Diese Zeichenkette wird dann zusammen mit dem Namen des Verschlüsselungsalgorithmus an die PHP-Funktion hash() als Parameter übergeben (z.B. hash('sha512', '57#4%@9'\\|Gw9M-D3Nd');). Der Rückgabewert dieses Funktionsaufrufs ist dann der verschlüsselte Wert vVB für den Benutzernamen B.
- Auch aus den Zeichenfolgen für WB, ush und BG wird eine fortlaufende Zeichenkette gebildet, allerdings beginnt diese Teilzeichenfolge mit der Zeichenfolge von BG, an welche dann die Zeichenfolgen von WB und ush angehängt werden (im BeispielGW9M-D3ND57#4%@9'\\| . Diese Zeichenkette wird dann ebefalls zusammen mit dem Namen des Verschlüsselungsalgorithmus an die PHP-Funktion hash() als Parameter übergeben (z.B. hash('sha512', 'GW9M-D3ND57#4%@9'\\|');). Der Rückgabewert für diesen Funktionsaufruf ist dann der verschlüsselte Wert vVBG, der zusammen mit vVB.
Sofern von dem Server auf dem das System zac4web installiert ist, kein E-Mails verschickt werden können, ist auch in mehreren Teilschritten eine verschlüsselte Version vVPfür ein Passwort P zu erzeugen:
- Dazu ist aus der Datei "__wm/__konstanten/pass_vorgaben.php" ist das Zeichen für die Konstante "passwort_zeichen" zu ermitteln.
- Danach ist anhand der Vorgaben in der Datei "__zac4web/__konstanten/user_pass" eine Zeichenfolge für ein Passwort P festzulegen, welches mindestens einmal, aber nicht nur das Zeichen "passwort_zeichen" und sonst nur Zeichen aus der Konstanten "pass_zeichen_erlaubt_pruefung" enthält. Die Zeichenfolge muss mindestens "pass_system_min" und darf höchstens "pass_system_max" Zeichen lang sein und darf weder mit einem Leerzeichen beginnen noch enden.
- Nachdem die Zeichenfolge für das Passwort feststeht, muss ermittelt werden, in welcher Datenbanktabelle TPdas Passwort zu speichern ist. Dazu muss anhand des Feldes "$pass_digit" aus der Datei "__wm/kern/__variablen/user_pass.php" der Wortwert für dieses Passwort berechnet werden. Hinweise zum Berechnungsverfahren und zur Bildung des Tabellennamens finden sich im Abschnitt Wortwerte für Benutzernamen und Passwörtern.
- Nun muss nur noch mit dem Verfahren aus der Funktion passwort_verschluesseln() aus der Datei "__wm/_admin/__funktionen/login.php" die verschlüsselte Version vVP zu dem Passwort erzeugt werden.
Falls innerhalb von vVP die Zeichen ' oder \ enthalten sind, muss jedes Vorkommen dieser Zeichen maskiert werden. Dies geschieht, indem vor jedem dieser Zeichen jeweils das Zeichen \ zusätzlich eingefügt wird.
Nachdem die verschlüsselten Versionen für den Benutzernamen und falls erforderlich eine verschlüsselte Version zu einem Passwort erzeugt wurde, können die erforderlichen Veränderungen an der Datenbank ausgeführt werden.
- Dazu muss als erstes mit einem Programm wie "phpMyAdmin" ein Zugriff zur Datenbank hergestellt werden, mit dem Datensätze in den Datenbanktabellen "_bereich_home_personen", TB und ggf. TP verändert oder sogar eingefügt werden können. Auch muss es erlaubt sein, Datensätze aus den Datenbanktabelle "__personen" und "_login_rechte" lesen zu dürfen. Falls die Datenbanktabellen TB und TP fehlen, wird sogar das Recht benötigt, Datenbanktabellen anlegen zu dürfen.
- Nach der Anmeldung bei der Datenbank ist aus der Datenbanktabelle "__personen" aus der Spalte `person_ID` die Identifikationsnummer des Personen-Datensatzes zu ermitteln, für den gültige Zugangsdaten erzeugt werden sollen.
- Anschließend ist in der Datenbanktabelle "_bereich_home_personen" für den Datensatz, für den in der Spalte `person_ID` die zuvor ermittelte Identifikationsnummer steht, in der Spalte `u` der Name von TB (und falls auch ein Passwort erstellt wurde, in der Spalte `p` der Name von TP) einzutragen. Falls in der Spalte `recht` nicht die Zahl notiert ist, die in der Datenbanktabelle "_login_rechte" dem Wert 'admin' in der Spalte `rechte_ID` zugeordnet ist, muss für den Datensatz in "_bereich_home_personen" auch in der Spalte `recht` der Wert angepasst werden. Sofern in der Datenbanktabelle "_bereich_home_personen" kein Datensatz zu der Identifikationsnummer vorhanden ist, muss ein entsprechender Datensatz eingefügt werden.
- Falls die Datenbanktabelle TB existiert, ist im Anschluss zu prüfen, ob für einen der vorhandenen Datensätze in der Spalte `ID` die zuvor ermittelte Identifikationsnummer eingetragen ist. Falls ja, ist nur der Wert in der Spalte `hash` gegen den im ersten Schritt erzeugten Wert von vVB und der Wert in der Spalte `hash_G` gegen den Wert von vVBG auszutauschen. Anderenfalls ist ein neuer Datensatz mit diesen Werten einzufügen. Sofern die Datenbanktabelle TB nicht vorhanden ist, muss sie neu angelegt werden. Es werden die Spalten `ID` (int(11) NOT NULL), `hash` (varchar(520) NOT NULL) und `hash_G` (varchar(520) NOT NULL) benötigt, wobei die Spalte `ID` als PRIMARY KEY festzulegen ist, damit maximal ein Datensatz pro Identifikationsnummer in dieser Tabelle gespeichert werden kann. Danach kann dann der benötigte Datensatz in diese Tabelle eingefügt werden.
- Das weitere Vorgehen hängt davon ab, ob ein Passwort P erzeugt wurde oder nicht.
- Wenn ein Passwort muss ermittelt werden, ob die Datenbanktabelle TP existiert. Falls die Tabelle vorhanden ist, ist danach zu prüfen, ob für einen der vorhandenen Datensätze in der Spalte `ID` die zuvor ermittelte Identifikationsnummer eingetragen ist. Ist das gegeben, muss für diesen Datensatz nur der Wert in der Spalte `hash` gegen den Wert von vVP ausgetauscht werden. Anderenfalls ist ein neuer Datensatz mit diesen Werten einzufügen. Sofern die Datenbanktabelle TP nicht vorhanden ist, muss sie neu angelegt werden. Es werden die Spalten `ID` (int(11) NOT NULL) und `hash` (varchar(520) NOT NULL) benötigt, wobei die Spalte `ID` als PRIMARY KEY festzulegen ist, damit maximal ein Datensatz pro Identifikationsnummer in dieser Tabelle gespeichert werden kann. Danach kann dann der benötigte Datensatz in diese Tabelle eingefügt werden.
Damit sind nun alle erforderlichen Notfallmaßnahmen ausgeführt worden und der Zugriff auf die Datenbank kann beendet und anschließend ein - hoffentlich erfolgreicher - Login-Versuch mit den neu zugewiesenen Zugangsdaten B und P gestartet werden. - Falls kein Passwort erzeugt wurde, weil der Server E-Mails versenden kann, muss nun sichergestellt werden, dass für den Personendatensatz, für den der Benutzername erzeugt und in die Datenbank eingetragen wurde, in der Datenbanktabelle "__personen" eine E-Mail-Adresse eingetragen ist, auf deren Nachrichten zugegriffen werden kann. Wenn das zutrifft, kann der Zugriff auf die Datenbank beendet werden. Es kann dann ein Login-Versuch mit dem neuen Benutzername B ausgeführt werden. Dieser Login-Versuch wird natürlich scheitern, weil kein gültiges Passwort bekannt ist. Das System "zac4web" zeigt in diesem Fall aber das Formular "Passwort holen" an, mit welchem ausgelöst werden kann, dass der Server automatisch ein Passwort erstellt und an die E-Mail-Adresse sendet, die zu dem Benutzernamen gehört, der im Rahmen der Notfallmaßnahmen neu erstellt wurde.
- Wenn ein Passwort muss ermittelt werden, ob die Datenbanktabelle TP existiert. Falls die Tabelle vorhanden ist, ist danach zu prüfen, ob für einen der vorhandenen Datensätze in der Spalte `ID` die zuvor ermittelte Identifikationsnummer eingetragen ist. Ist das gegeben, muss für diesen Datensatz nur der Wert in der Spalte `hash` gegen den Wert von vVP ausgetauscht werden. Anderenfalls ist ein neuer Datensatz mit diesen Werten einzufügen. Sofern die Datenbanktabelle TP nicht vorhanden ist, muss sie neu angelegt werden. Es werden die Spalten `ID` (int(11) NOT NULL) und `hash` (varchar(520) NOT NULL) benötigt, wobei die Spalte `ID` als PRIMARY KEY festzulegen ist, damit maximal ein Datensatz pro Identifikationsnummer in dieser Tabelle gespeichert werden kann. Danach kann dann der benötigte Datensatz in diese Tabelle eingefügt werden.
© zacher-info.de
- Seite zuletzt geändert: 14.08.2023 - Elisabeth Zacher