HTTPONLY EN NODE.JS: CÓMO PROTEGER LAS COOKIES

HttpOnly es un atributo que se puede configurar en una cookie HTTP para aumentar la seguridad de una aplicación web. Cuando una cookie tiene el atributo HttpOnly, significa que solo puede ser accedida por el servidor a través de solicitudes HTTP y no por scripts del lado del cliente, como JavaScript. Esto ayuda a proteger la cookie contra ataques como el Cross-Site Scripting (XSS), ya que un atacante no podrá acceder a la cookie mediante scripts maliciosos ejecutados en el navegador, mejorando la seguridad al limitar la exposición de cookies sensibles y mitiga el impacto de ataques XSS al evitar que scripts maliciosos lean o manipulen la cookie. HttpOnly se usa comúnmente para cookies de autenticación (como tokens de sesión) para reducir el riesgo de robo de cookies. HttpOnly no protege contra otros tipos de ataques, como Cross-Site Request Forgery (CSRF).
Ejemplo completo del servidor con
NodeJS y Express

// Archivo: server.js
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();

app.use(cookieParser());

app.get('/set-cookie', (req, res) => {
    // Configura una cookie con HttpOnly
    res.cookie('sessionToken', 'xyz789', {
   httpOnly: true, // Impide acceso desde JavaScript
   secure: true,   // Solo por HTTPS (usa HTTP para pruebas locales)
   sameSite: 'Strict', // Protección contra CSRF
   maxAge: 24 * 60 * 60 * 1000 // Expira en 24 horas
    });
    res.send('Cookie "sessionToken" establecida con HttpOnly.');
});

app.get('/check-cookie', (req, res) => {
    // Verifica si la cookie existe en la solicitud
    const sessionToken = req.cookies.sessionToken;
    res.send(`Valor de la cookie en el servidor: ${sessionToken || 'No encontrada'}`);
});

app.listen(3000, () => {
    console.log('Servidor corriendo en http://localhost:3000');
});
Explicación:
  • La ruta /set-cookie crea una cookie llamada sessionToken con HttpOnly.
  • La ruta /check-cookie demuestra que el servidor puede leer la cookie en solicitudes HTTP.
Si se intenta acceder desde javascript a la cookie con el código:

   const cookies = document.cookie;
 console.log(cookies);
Se puede ver que sessionToken tiene HttpOnly, no aparecerá en el resultado.