Muchos recursos en Internet afirman que LocalStorage puede ser inseguro ya que la aplicación puede ser propensa a ataques de secuencias de comandos entre sitios. Si ese es el caso, ¿cuál es la forma más segura de almacenar el token de autenticación? Entiendo que la cookie es otra opción, pero ¿es segura o no?
Lo que probablemente quieren decir con esto es que si su sitio web es víctima de un ataque XSS , el atacante puede extraer los tokens de sus usuarios de localStorage, porque son inherentemente accesibles a los scripts.
Lo mismo se aplica a la mayoría de las cookies, sin embargo, puede configurar las cookies para que no estén disponibles para los scripts, de modo que solo se usen para enviarlas al servidor (donde el servidor las verifica y maneja la autenticación). De esa forma, un ataque XSS no puede extraer cookies que tengan el indicador HttpOnly establecido en los navegadores de sus usuarios.
Mientras lo hace, configure también el indicador Secure de su cookie para que solo se transmita a través de una conexión cifrada.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#restrict_access_to_cookies
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#security
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#define_where_cookies_are_sent
En PHP 7.3 y versiones posteriores, por ejemplo, usaría la función setcookie de esta manera para establecer una cookie Secure , HttpOnly , SameSite para la autenticación:
setcookie("__Host-Auth-Cookie", "123-session-id", [ 'expires' => time() + 12 * 60 * 60, 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax', ]);