QuestionsNetworking/Security

Cookie flags and session security

Cookies & SessionsEasyNetworking/Security

You store a session id in a cookie. Which cookie attributes make it secure, and what does each defend against?

What it tests

Knowing the security-relevant cookie attributes and mapping each to the attack it mitigates.

Approach & answer

A session cookie is a prime target, and its ATTRIBUTES are your first line of defense — each maps to a specific threat. HttpOnly: the cookie is invisible to JavaScript (document.cookie can't read it), so if an attacker manages to run script on your page (XSS), they still can't STEAL the session cookie. Every session/auth cookie should be HttpOnly. Secure: the cookie is only ever sent over HTTPS, so it can't leak over a plaintext connection an eavesdropper could read. SameSite: controls whether the cookie is attached to CROSS-SITE requests, and it's the main defense against CSRF. SameSite=Strict never sends the cookie on cross-site navigations (safest, but breaks 'click a link from email and stay logged in'); SameSite=Lax (the modern browser default) sends it on top-level navigations but not on cross-site subrequests like a hidden form POST or an image — blocking the classic CSRF vector while keeping normal links working; SameSite=None means send it cross-site (needed for legitimate third-party contexts) but browsers require Secure with it. Beyond flags: Domain and Path scope WHERE the cookie is sent (keep them tight — don't scope a session cookie to a parent domain that subdomains you don't control can see); Expires/Max-Age control lifetime (a session cookie with no expiry dies when the browser closes; long-lived cookies are more exposure); and a __Host- name prefix enforces Secure + no Domain + Path=/ for extra hardening. The combination that matters for a session id: HttpOnly (blocks theft via XSS) + Secure (blocks leak over HTTP) + SameSite=Lax or Strict (blocks CSRF). Getting these three right neutralizes the most common cookie attacks; forgetting HttpOnly, in particular, turns any XSS into instant session hijacking.

Use this technique when

Setting a session/auth cookie; reviewing why a cookie is exploitable; explaining CSRF/XSS cookie defenses.

Code

Set-Cookie: sid=abc123; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=3600

Attribute      Defends against
-------------  -------------------------------------------------------
HttpOnly       JS can't read it -> XSS can't STEAL the session cookie
Secure         sent only over HTTPS -> no leak over plaintext
SameSite=Lax   not sent on cross-site subrequests -> blocks CSRF
SameSite=Strict strongest CSRF defense (breaks cross-site link login)
Domain/Path    scope tightly so it isn't exposed more widely than needed
__Host- prefix forces Secure + Path=/ + no Domain (extra hardening)

Session id essentials: HttpOnly + Secure + SameSite. Forgetting HttpOnly
turns any XSS into instant session hijacking.

References