Soy un principiante, y esto puede ser muy obvio para ti, pero estoy tratando de entender si hay problemas de seguridad con este ejemplo.
Hoy en Stack Overflow, vi el siguiente post: PHP Sessions Iniciar sesión con Recordarme .
La pregunta es sobre la creación de una función "Recordarme" para extender la sesión autenticada para las personas que han iniciado sesión.
La respuesta aceptada fue:
function setSession($username,$password,$cookie=null){
// Other code for login ($_POST[]....)
// $row is result of your sql query
$values = array($username,$this->obscure($password),$row['id']);
$session = implode(",",$values);
// check if cookie is enable for login
if($cookie=='on'){
setcookie("your_cookie_name", $session, time()+60*60*24*100,'/');
} else {
$_SESSION["your_session_name"] = $session;
}
}
Por lo tanto, mi pregunta no es sobre cómo debería hacer esto, pero ¿estoy en lo cierto en los problemas de seguridad que describí a continuación para este ejemplo de código?
Usando el Top 10 de OWASP como referencia, estos son los problemas que veo:
Problema 1:
Primero, podemos suponer que$session
tiene la contraseña y el nombre de usuario porque $value
contiene el nombre de usuario y la contraseña del usuario. También con esta línea:
setcookie("your_cookie_name", $session, time()+60*60*24*100,'/');
La cookie tiene ahora las credenciales del usuario. Un gran error para mí, consulte Número 3 para obtener más información.
Problema 2:
Leí este OWASP article donde dicen que para evitar el CSRF necesitamos generar un ID aleatorio asociado a la SESIÓN o Cookie.
Obviamente, en este código no hay un identificador único o token que sea sospechoso para mí.
Problema 3:
También podemos imaginar que el sitio podría ser vulnerable a 'Cross-Site Scripting (XSS)'De hecho, si las credenciales del usuario se almacenan en una cookie, podemos ejecutar un script simple y mostrar la cookie.
alert(document.cookie);
Pregunta
Estoy seguro de que puede haber otro problema, pero he expuesto el más obvio para mí. ¿Tengo razón en los problemas que he identificado? ¿Perdí algún otro problema importante de seguridad con este código?