CSRF Protection: Tokens, SameSite Cookies, and Double Submit
CSRF Protection: Tokens, SameSite Cookies, and Double Submit
जब हम web applications बनाते हैं, तो security सबसे ज़्यादा important factor होता है। एक ऐसी ही common लेकिन dangerous attack technique होती है — CSRF (Cross-Site Request Forgery)। इस blog में हम step-by-step समझेंगे कि CSRF क्या है, ये कैसे काम करता है, और इसे रोकने के लिए हम Tokens, SameSite Cookies, और Double Submit Cookies का use कैसे करते हैं। ये topic college exams और interviews दोनों में बहुत important है।
CSRF Attack क्या होता है?
CSRF का मतलब है Cross-Site Request Forgery। ये एक ऐसी web attack technique है जिसमें attacker user के authentication session का फायदा उठाकर unauthorized action perform करवा देता है। Simple language में कहें तो — जब user किसी website में login होता है, attacker उसे किसी दूसरी malicious link पर क्लिक करवाकर उस logged-in session के जरिए कुछ गलत action करवा देता है।
Example समझिए
मान लीजिए आप अपने bank account में login हैं। अगर कोई attacker आपको एक ऐसी link भेजता है जो दिखने में normal लगे लेकिन actually वो आपके account से पैसे transfer करने का request भेज दे — तो वो CSRF attack कहलाएगा।
CSRF कैसे काम करता है?
- User एक trusted site (जैसे bank.com) में login करता है और उसका session active रहता है।
- अब attacker एक fake site बनाता है जिसमें malicious request embedded होती है।
- User उस attacker site को खोलता है, और क्योंकि उसका session पहले से active है, server उस forged request को valid मान लेता है।
CSRF Attack को रोकने के मुख्य तरीके
CSRF से बचने के लिए developers कुछ effective techniques use करते हैं। उनमें से सबसे common हैं:
- Anti-CSRF Token (CSRF Token)
- SameSite Cookies
- Double Submit Cookie Pattern
1. Anti-CSRF Token क्या होता है?
CSRF Token एक random unique string होती है जो हर request के साथ generate और validate की जाती है। जब user कोई form submit करता है, तो ये token साथ में भेजा जाता है ताकि server verify कर सके कि request सही user से आई है या नहीं।
CSRF Token कैसे काम करता है?
- Server हर session या form के लिए एक random token generate करता है।
- ये token HTML form या request header में hidden field के रूप में रखा जाता है।
- जब user form submit करता है, server उस token को verify करता है।
- अगर token match होता है, तो request accept होती है, वरना reject कर दी जाती है।
Example Code
<form method="POST" action="/transfer">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
<input type="text" name="amount" placeholder="Enter Amount">
<button type="submit">Transfer</button>
</form>
ऊपर दिए गए example में hidden input field में csrf_token डाला गया है। Server-side language (जैसे Python Flask, Django, PHP, Node.js) token को generate और verify करती है।
Server-Side Verification Example
if request.form['csrf_token'] == session['csrf_token']:
process_request()
else:
abort(403)
अगर token valid नहीं होता, तो request को reject कर दिया जाता है और 403 Forbidden error मिलती है।
2. SameSite Cookies क्या होते हैं?
SameSite Cookie एक browser-level protection technique है जो cross-site requests को restrict करती है। जब SameSite attribute को सही तरीके से सेट किया जाता है, तो cookies automatically third-party requests में नहीं भेजी जातीं, जिससे CSRF का risk कम हो जाता है।
SameSite Attribute के Types
| SameSite Value | Explanation |
|---|---|
| Strict | Cookie सिर्फ same site से आने वाली requests में भेजी जाती है। |
| Lax | Cookie GET requests में allow होती है (जैसे link click), लेकिन POST/PUT में नहीं। |
| None | Cookies cross-site requests में भी भेजी जाती हैं, लेकिन “Secure” flag जरूरी है। |
Example Code (HTTP Header)
Set-Cookie: session_id=abc123; SameSite=Strict; Secure; HttpOnly
इस setting में SameSite=Strict cross-site requests में cookie को automatically block कर देता है।
3. Double Submit Cookie Technique
Double Submit Cookie एक और तरीका है जो CSRF attacks को रोकने में मदद करता है। इसमें server एक cookie और form दोनों में एक ही token भेजता है। जब user form submit करता है, दोनों token values match होनी चाहिए।
Double Submit Process
- Server login के समय एक random CSRF token generate करता है और उसे cookie में store करता है।
- Client-side script उस token को form के hidden field में डालता है।
- जब form submit होता है, server cookie और form दोनों से token को verify करता है।
Example Code
// Set token in cookie
Set-Cookie: csrf_token=xyz123; SameSite=Lax; HttpOnly
// HTML Form
<form method="POST" action="/update">
<input type="hidden" name="csrf_token" value="xyz123">
<button type="submit">Update</button>
</form>
Server Verification Logic
if request.cookies['csrf_token'] == request.form['csrf_token']:
process_request()
else:
abort(403)
अगर दोनों token match करते हैं तो request valid मानी जाती है।
CSRF Protection Techniques का Comparison
| Method | Security Level | Implementation Complexity | Browser Support |
|---|---|---|---|
| CSRF Token | High | Medium | All Browsers |
| SameSite Cookies | Medium | Low | Modern Browsers Only |
| Double Submit Cookie | High | Medium | All Browsers |
Best Practices for CSRF Protection
- हर sensitive request के साथ unique CSRF token भेजें।
- Cookies को हमेशा
HttpOnlyऔरSecureflag के साथ भेजें। SameSite=LaxयाStrictuse करें जहाँ possible हो।- Session IDs को random और unpredictable बनाएं।
- Authentication से जुड़ी APIs में double verification लागू करें।
- GET methods को हमेशा safe और idempotent रखें।
CSRF vs XSS (Quick Difference)
| Factor | CSRF | XSS |
|---|---|---|
| Attack Type | Forged Requests | Script Injection |
| Depends On | User’s Active Session | Website Vulnerability |
| Target | Server Logic | User’s Browser |
| Prevention | CSRF Tokens, SameSite Cookies | Input Validation, Output Encoding |
Exam Point of View Notes
- CSRF का full form — Cross-Site Request Forgery।
- यह attack user के authenticated session का misuse करता है।
- Protection के लिए CSRF Token सबसे effective technique है।
- SameSite Cookie browser-level security provide करती है।
- Double Submit Cookie एक alternate token validation approach है।
- Exam में short note या 5 marks question के लिए CSRF Token का working जरूर याद रखें।