JAVASCRIPT

Configuring Secure, HTTP-Only Cookies with SameSite

Learn to configure cookies with `HttpOnly`, `Secure`, and `SameSite` attributes to protect against XSS, CSRF, and session hijacking vulnerabilities.

const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

app.get('/login', (req, res) => {
  // Simulate successful login
  const userId = 'user123';
  const sessionToken = 'aSuperSecretSessionToken12345';

  res.cookie('session', sessionToken, {
    maxAge: 3600000, // Cookie expires in 1 hour
    httpOnly: true,  // Important: Prevents client-side JavaScript access (mitigates XSS)
    secure: true,    // Important: Sends cookie only over HTTPS (prevents sniffing)
    sameSite: 'Lax', // Important: Protects against CSRF attacks. Options: 'Strict', 'Lax', 'None'
                     // 'Lax' sends cookies on top-level navigations and POST requests from other sites.
                     // 'Strict' sends cookies only on same-site requests.
                     // 'None' sends cookies with cross-site requests, but requires 'Secure'.
    path: '/',       // Cookie is valid for all paths
  });

  res.send(`Logged in. Session token set for user: ${userId}`);
});

app.get('/logout', (req, res) => {
  res.clearCookie('session');
  res.send('Logged out.');
});

app.get('/dashboard', (req, res) => {
  const sessionToken = req.cookies.session;
  if (sessionToken) {
    res.send(`Welcome to your secure dashboard! Your session token: ${sessionToken}`);
  } else {
    res.status(401).send('Unauthorized. Please log in.');
  }
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});
How it works: This snippet demonstrates how to set cookies securely in an Express.js application. The `httpOnly: true` attribute prevents client-side JavaScript from accessing the cookie, significantly mitigating Cross-Site Scripting (XSS) risks. `secure: true` ensures the cookie is only sent over HTTPS connections, protecting against eavesdropping. The `sameSite` attribute helps prevent Cross-Site Request Forgery (CSRF) attacks by controlling when cookies are sent with cross-site requests. Using `Lax` or `Strict` modes provides strong protection, while `None` allows cross-site requests but requires the `Secure` attribute.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs