lograr la implementación de inicio de sesión sin usar sesiones

9

Wordpress no usa sesiones.

Siempre me pregunté qué mecanismo utiliza WP para mantener un estado de usuario cuando el usuario va de una página a otra.

Joe promedio
fuente

Respuestas:

12

Utiliza cookies desnudas y almacena la información del estado de inicio de sesión del lado del cliente.

ingrese la descripción de la imagen aquí

+

ingrese la descripción de la imagen aquí

=

wordpress_7339a175323c25a8547b5a6d26c49afa = su nombre de usuario% 7C1457109155% 7C170f103ef3dc57cdb1835662d97c1e13;

¿De dónde vienen todas estas galletas y sal?

La sal está en su archivo 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');

Las frases únicas se usan en una función hash criptográfica

La cookie de autenticación, cuyo nombre se almacena dentro de AUTH_COOKIE, que se forma concatenando "wordpress_" con la suma md5 del conjunto de sitios en default-constants.php. Este es el comportamiento predeterminado y puede anularse desde el interior de su archivo de configuración, configurando algunas de las constantes por adelantado.

La cookie de autenticación es una concatenación del nombre de usuario, una marca de tiempo hasta la cual la cookie de autenticación es válida., Y un HMAC, que es una especie de hash con sesgo de clave para aquellos que obtuvieron un TL; DR en este momento. Las tres variables se concatenan con el carácter de tubería |.

Así es como se construye el HMAC:

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

¿Es esto seguro?

Según este artículo, de donde proviene la mayor parte de la información en esta respuesta, un hacker tardaría aproximadamente una semana en aplicar la fuerza bruta al enviar 30 solicitudes por segundo si supieran cuál es su frase única y 200,000,000,000,000,000,000,000,000,000,000 veces más difícil si sus claves son únicas.

Chris_O
fuente
Chris ¿Las sesiones no hacen exactamente lo mismo? Las sesiones requieren una cookie en el sitio del cliente y el servidor la usa para identificar con qué usuario está tratando. No veo cuál es la diferencia entre una implementación basada en sesión y esto.
Joe promedio
2
De repente tengo hambre.
Kevin
2
Las sesiones de PHP almacenan y rastrean la información de inicio de sesión dentro del super global $ _SESSION Una sesión caduca cuando cierra su navegador. La cookie de autenticación de WordPress dura días más largos o incluso semanas. Ver: tuxradar.com/practicalphp/10/1/0
Chris_O
0

Las cookies son solo el almacenamiento del lado del cliente de los datos de la sesión ... Cookies de WordPress

De hecho, uno puede tener cookies sin sesiones, pero no hay sesiones sin cookies.

Martin Zeitler
fuente
Me temo que estás completamente equivocado en eso. WordPress no utiliza sesiones en absoluto.
Joe promedio
Las cookies de PHP son parte de las sesiones de PHP, incluso si WP probablemente no utilice sesiones del lado del servidor para el almacenamiento de datos de la sesión (para ser compatible con algunos alojamientos compartidos deficientes).
Martin Zeitler
No estoy seguro de lo que quieres decir con eso. Para usar sesiones en php, debes habilitar las sesiones en la parte superior de tu página usando session_start()explícitamente. Ahora, obviamente, WordPress no tiene session_start()ninguna parte en su núcleo. ¿Ves dónde me estoy confundiendo con tu último comentario?
Promedio Joe
Son solo principios básicos de las sesiones PHP ... que session_start () habilita el almacenamiento del lado del servidor mientras que setcookie () habilita el almacenamiento del lado del cliente de los datos de la sesión. Tal vez simplemente elimine la idea de que las sesiones y las cookies son algo completamente diferente: la única diferencia real es la ubicación de almacenamiento.
Martin Zeitler