Ich baue ein privates CMS für meinen eigenen Gebrauch und bin an dem Punkt angelangt, an dem ich damit beginnen werde, die Funktionen zum Speichern von Benutzernamen und Passwörtern zu entwickeln. Ich erwäge die Möglichkeit, alle Admin-Benutzernamen, Passwörter und Benutzerdetails in einem mehrdimensionalen Array in einer PHP-Datei zu speichern, anstatt SQL zu verwenden, um sie in einer Datenbank zu speichern.
Der Grund, warum ich diesen nicht-traditionellen Ansatz zur Speicherung von Benutzerinformationen verwenden möchte, ist die Überzeugung, dass es so für Angreifer schwieriger sein wird, unberechtigten Zugriff auf Benutzerinformationen (Benutzernamen, Passwörter, IP-Adressen usw.) zu erlangen, da ich keine Verbindung zu einer MySQL-Datenbank herstelle.
Grober Code-Entwurf:
add_user.php
// Setzen der letzten Referrer-Sitzungsvariable auf die aktuelle Seite
$_SESSION['last_referrer'] = 'add_user.php';
// Setzen der Roh-Credential-Variablen und des Salzes
$raw_user = $_POST['user'];
$raw_pass = $_POST['pass'];
$raw_IP = $_SERVER['REMOTE_ADDR'];
$salt = '&^${QqiO%Ur!W0,.#.*';
// Setzen des Benutzernamens, wenn er sauber ist, ansonsten false
$username = (is_clean($raw_user)) ? $raw_user : false; // is_clean() ist eine Funktion, die ich erstellen werde, um zu überprüfen, ob Zeichenfolgen sauber sind und an ein Array angehängt werden können, ohne einen Parsfehler zu erzeugen.
// Setzen des gesalzenen, bereinigten und verschlüsselten Passworts, wenn es sauber ist, ansonsten false
$password = (is_clean($raw_pass)) ? $salt . encrypt($raw_pass) : false; // encrypt() ist eine Funktion, die ich erstellen werde, um Passwörter auf eine bestimmte Weise zu verschlüsseln
// Wenn Benutzername und Passwort beide gültig und nicht false sind
if( $username && $password ) {
// Setzen der IP-Adresse des Benutzers
$IP = sanitize($raw_IP);
// Erstellen eines temporären Schlüssels
$temp_key = $_SESSION['temp_key'] = random_key();
// random_key() ist eine Funktion, die ich erstellen werde, um einen Schlüssel zu erstellen, den ich nur so lange in einer Sitzung speichern werde, um Benutzerinformationen zur database.php-Datei hinzuzufügen
// Benutzerdetails-Array zum Hauptarray aller Benutzer hinzufügen
$add_user = append_array_to_file('database.php', array($username, $password, $IP));
// append_array_to_file() ist eine Funktion, die ich erstellen werde, um Arrays dem bestehenden mehrdimensionalen Array hinzuzufügen, das alle Benutzeranmeldeinformationen enthält.
// Die Funktion wird die database.php-Datei mithilfe von cURL laden, damit database.php überprüfen kann, ob die temporäre Schlüssel-Sitzung gesetzt ist. Die Funktion append_array_to_file() wird anhalten und false zurückgeben, wenn die database.php-Datei zurückmeldet, dass der temporäre Schlüssel nicht gesetzt ist.
// Die Funktion wird database.php durchsuchen und das aktuelle Array von Benutzern in die Funktion einlesen, dann die Anmeldeinformationen des aktuellen Benutzers dem Array hinzufügen und schließlich die database.php-Datei mit dem neuen Array überschreiben.
// Den temporären Sitzungsschlüssel zerstören
unset($_SESSION['temp_key']);
}
else {
return false;
}
database.php
$users_credentials = array(1 => array('username' => 'jack',
'password' => '&^${QqiO%Ur!W0,.#.*HuiUn34D09Qi!d}Yt$s',
'ip'=> '127.0.0.1'),
2 => array('username' => 'chris',
'password' => '&^${QqiO%Ur!W0,.#.*8YiPosl@87&^4#',
'ip'=> '873.02.34.7')
);
Ich würde dann benutzerdefinierte Funktionen erstellen, um SQL-Abfragen wie SELECT für die Verwendung bei der Überprüfung von Benutzern, die sich anmelden wollen, zu simulieren.
Meine Fragen
-
Ist dies eine schlechte Idee, und wenn ja, warum?
-
Habe ich recht in der Annahme, dass dies die Anzahl der Möglichkeiten für Hacker, unbefugten Zugriff zu erlangen, das Ausspähen/Diebstahl von Passwörtern usw. reduzieren wird, da ich keine Verbindung zu einer entfernten Datenbank herstelle?