Erreichen der Anmeldeimplementierung ohne Verwendung von Sitzungen

9

Wordpress verwendet keine Sitzungen.

Ich habe mich immer gefragt, welchen Mechanismus WP verwendet, um einen Benutzerstatus aufrechtzuerhalten, wenn der Benutzer von Seite zu Seite wechselt.

Durchschnittstyp
quelle

Antworten:

12

Es verwendet bloße Cookies und speichert die clientseitigen Informationen zum Anmeldestatus.

Geben Sie hier die Bildbeschreibung ein

+

Geben Sie hier die Bildbeschreibung ein

=

wordpress_7339a175323c25a8547b5a6d26c49afa = Ihr Benutzername% 7C1457109155% 7C170f103ef3dc57cdb1835662d97c1e13;

Woher kommen all diese Kekse und Salz?

Das Salz befindet sich in Ihrer Datei wp-config.php:

/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

Die eindeutigen Phrasen werden in einer kryptografischen Hash-Funktion verwendet

Das Authentifizierungs-Cookie, dessen Name in AUTH_COOKIE gespeichert ist und das durch Verketten von "wordpress_" mit der in default-constants.php festgelegten md5-Summe der Siteurl gebildet wird. Dies ist das Standardverhalten und kann aus Ihrer Konfigurationsdatei heraus überschrieben werden, indem einige der Konstanten im Voraus eingerichtet werden.

Das Authentifizierungscookie ist eine Verkettung des Benutzernamens, ein Zeitstempel, bis zu dem das Authentifizierungscookie gültig ist, und ein HMAC, eine Art schlüsselabhängiger Hash für diejenigen, die gerade einen TL; DR gezogen haben. Die drei Variablen sind mit dem Pipe-Zeichen | verknüpft.

So ist der HMAC aufgebaut:

$hash = hash_hmac('md5', $username . '|' . $expiration, wp_hash($username . substr($user->user_pass, 8, 4) . '|' . $expiration, $scheme));

Ist das sicher?

Laut diesem Artikel, aus dem die meisten Informationen in dieser Antwort stammen, würde ein Hacker ungefähr eine Woche brauchen, um 30 Anfragen pro Sekunde brutal zu senden, wenn er wüsste, was Ihre eindeutige Phrase ist, und 200.000.000.000.000.000.000.000.000.000.000 mal schwerer, wenn Ihre Schlüssel eindeutig sind.

Chris_O
quelle
Chris. Tun Sitzungen nicht genau das Gleiche? Für Sitzungen ist ein Cookie auf der Client-Site erforderlich, und der Server verwendet dieses Cookie, um zu identifizieren, mit welchem ​​Benutzer es sich handelt. Ich sehe keinen Unterschied zwischen einer sitzungsbasierten Implementierung und dieser.
Durchschnittlicher Joe
2
Ich habe plötzlich Hunger.
Kevin
2
PHP-Sitzungen speichern und verfolgen Anmeldeinformationen im Super Global $ _SESSION. Eine Sitzung läuft ab, wenn Sie Ihren Browser schließen. Das WordPress Auth-Cookie hält viel länger Tage oder sogar Wochen an. Siehe: tuxradar.com/practicalphp/10/1/0
Chris_O
0

Cookies sind nur die clientseitige Speicherung von Sitzungsdaten ... WordPress-Cookies

Tatsächlich kann man Cookies ohne Sitzungen haben, aber keine Sitzungen ohne Cookies.

Martin Zeitler
quelle
Ich fürchte, Sie liegen absolut falsch. WordPress verwendet überhaupt keine Sitzungen.
Durchschnittlicher Joe
PHP-Cookies sind Teil von PHP-Sitzungen - auch wenn WP möglicherweise keine serverseitigen Sitzungen für die Speicherung von Sitzungsdaten verwendet (um mit einigen beschissenen gemeinsam genutzten Hostings kompatibel zu sein).
Martin Zeitler
Ich bin mir nicht sicher, was du damit meinst. Um Sitzungen in PHP verwenden zu können, müssen Sie Sitzungen oben auf Ihrer Seite durch session_start()explizite Verwendung aktivieren . Jetzt hat WordPress offensichtlich session_start()nirgendwo in seinem Kern. Sehen Sie, wo mich Ihr letzter Kommentar verwirrt?
Durchschnittlicher Joe
Es sind nur Grundprinzipien von PHP-Sitzungen ... dass session_start () die serverseitige Speicherung ermöglicht, während setcookie () die clientseitige Speicherung von Sitzungsdaten ermöglicht. Vielleicht sollten Sie einfach die Idee loswerden, dass Sitzungen und Cookies etwas völlig anderes sind - der einzige wirkliche Unterschied ist der Speicherort.
Martin Zeitler