The SameSite Cookie attribute is an effective mechanism provided by modern browsers to protect against CSRF attacks by controlling the sending behavior of cookies in cross-site requests.
Three Values of SameSite Attribute
1. Strict (Strict Mode)
- Cookies are only sent in same-site requests
- Cross-site requests will not carry cookies
- Provides strongest CSRF protection
- May affect user experience (e.g., cookies not carried when clicking external links to enter website)
2. Lax (Lax Mode, Recommended)
- Allows certain safe cross-site requests to carry cookies
- Allowed scenarios:
- GET requests
- Top-level navigation (e.g., clicking links)
- Prefetch requests
- Not allowed scenarios:
- POST, PUT, DELETE and other modifying requests
- iframe, image, script and other resource requests
- Balances security and user experience
3. None (No Restriction)
- Allows all cross-site requests to carry cookies
- Must be used with Secure attribute
- Provides no CSRF protection
- Only used in specific scenarios (e.g., third-party login)
Implementation
Setting SameSite Cookie
javascript// Node.js Express example res.cookie('sessionId', 'abc123', { httpOnly: true, secure: true, sameSite: 'lax' // or 'strict', 'none' }); // PHP example setcookie('sessionId', 'abc123', [ 'httponly' => true, 'secure' => true, 'samesite' => 'Lax' ]);
SameSite Attribute Compatibility
- Modern browsers: Chrome 51+, Firefox 60+, Safari 12+, Edge 79+
- Legacy browsers: Do not support SameSite attribute, need other protection measures
- Mobile browsers: iOS Safari 12.2+, Android Chrome 51+
Best Practices
-
Use Lax mode by default:
- Provides good CSRF protection
- Maintains normal user experience
- Suitable for most application scenarios
-
Use Strict mode for sensitive operations:
- Sensitive operations involving financial transactions, permission changes
- Can set stricter policies for specific routes or pages
-
Coordinate with other protection measures:
- CSRF Token
- Referer header verification
- Custom HTTP headers
-
Progressive enhancement strategy:
- Detect if browser supports SameSite
- Fallback to other protection mechanisms when not supported
Important Notes
-
Secure attribute requirement:
- SameSite=None must be used with Secure attribute
- Requires HTTPS protocol
-
Subdomain behavior:
- SameSite treats subdomains as same-site
- a.example.com and b.example.com are same-site relationship
-
Testing and verification:
- Test behavior in different browsers
- Verify correct handling of cross-site requests
SameSite Cookie attribute is an important tool for protecting against CSRF attacks, but should be part of a multi-layer protection strategy, not the only protection measure.