Prevent Cross-Site Request Forgery In PHP : Implement CSRF Token In PHP

Other Blogs

Blogs ❯❯ PHP

Image could not load

PHP CSRF Prevention

Cross-Site Request Forgery (CSRF) Prevention in PHP

Cross-Site Request Forgery (CSRF) एक ऐसा web vulnerability है जिसमे attacker किसी user को बिना उसके जाने, एक unwanted request भेजने पर मजबूर करता है। ये vulnerability attacker को user के credentials के through unintentional actions करने का chance देती है, जैसे कि fund transfer, account changes, या फिर sensitive information leakage.

इस blog में हम समझेंगे कि CSRF attack क्या होता है, कैसे होता है, और PHP में CSRF attacks से बचने के लिए आप क्या कर सकते हैं, detail में समझेंगे।

What is CSRF attack ?

CSRF attack में एक legitimate user को उनकी authentication के साथ एक unauthorized action perform करने के लिए force किया जाता है। Attacker user कि authentication token का misuse करके उनके behalf पर requests send करता है।

For Example -

Imagine कीजिये कि आप एक online banking site पर logged इन हैं , अगर एक attacker आपको एक malicious link या form के through कुछ ऐसा action perform करवाता है जिसमे आपके session के through आपकी details use हो रही हैं, तो यह एक CSRF attack होगा।

How CSRF attack works ?

  • Step 1 : Victim को Login करवाया जाता है - User अपने banking या किसी और web application पर login करता है और session cookie उसके browser में store हो जाती है।

  • Step 2 : Malicious Link/Request - Attacker victim को एक crafted email या malicious link के through उस request को trigger करने के लिए मजबूर करता है , Victim को यह नहीं पता होता कि वो किस चीज़ को click कर रहा है।

  • Step 3 : Unauthorized Request - जब victim वो link या form submit करता है, तो unauthorized request victim के session के through perform हो जाता है, जिससे attacker उनका data misuse कर सकता है।

CSRF Prevention Techniques in PHP

CSRF attacks से बचने के लिए कुछ standard techniques use कि जाती हैं, जैसे CSRF tokens, SameSite cookies, और HTTP headers. चलिए इनको detail में देखते हैं।

1. CSRF Token Implementation

CSRF token एक unique random string होता है जो हर form submission के साथ generate होता है और server-side पर validate किया जाता है। अगर token match नहीं करता, तो request reject कर दिया जाता है।

यह token typically hidden input field के through pass किया जाता है।

Example

Step 1 : Token Generate करना और Form में Include करना -

session_start(); if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } ?> <form method="POST" action="process_form.php"> <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>"> <!-- Form Fields Here --> <button type="submit">Submit</button> </form>
Step 2 : Validate Token

session_start(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) { die('CSRF token mismatch'); } // Process form data here }
Explanation
  • bin2hex(random_bytes(32)) एक secure random token generate करता है।

  • Token को session में store किया जाता है और form के hidden field के through pass किया जाता है।

  • Form submit hone के बाद, server-side पर token को validate किया जाता है. अगर token match नहीं करता, तो request reject कर दिया जाता है।

2. Same Site Cookie Attribute In PHP

Same Site attribute cookies में set किया जाता है जिससे cross-site request में cookies send नहीं होती , यह attribute CSRF attacks को mitigate करने में काफी helpful होता है।

setcookie('session', 'value', ['samesite' => 'Strict', 'secure' => true, 'httponly' => true]);
Explanation

SameSite=Strict: इस attribute के साथ cookie सिर्फ same origin से ही send होगी. Cross-site requests के लिए cookie नहीं send होगी, जो CSRF attacks से बचाता है।

3. Referer Header Validation In PHP

Referer header को check करना एक additional security layer provide कर सकता है , यह check करता है कि request same origin से आ रही है या नहीं।

अगर referer header mismatch करता है, तो request को reject किया जाता है।

if ($_SERVER['REQUEST_METHOD'] === 'POST') { $referer = $_SERVER['HTTP_REFERER']; if ($referer !== 'https://example.com/form_page') { die('Invalid referer'); } // Process form data here }

Referer header ensure करता है कि request trusted source से आ रही है।

Real-World Example of CSRF Attack and Prevention

Imagine कीजिये कि एक social media website है जिसमे users अपना email update कर सकते हैं। अगर email update form CSRF token use नहीं करता है, तो एक attacker victim को email update request के लिए force कर सकता है बिना उसके knowledge के।

Attacker एक malicious link send सकता है जो victim के browser में execute होते ही, उसके email address को attacker के desired email address से replace कर देगा।

इस scenario में CSRF token implement करने से आप इस vulnerability को prevent कर सकते हैं।

Conclusion

Cross-Site Request Forgery (CSRF) एक dangerous vulnerability है जो काफी severe consequences ला सकती है अगर इसको properly handle नहीं किया जाये।

Always remember, web security एक ongoing process है, और आपको हमेशा best security practices follow करने चाहिए ताकि आपके users और आपकी application safe रहे।

Recent Blogs

Loading ...

Hey ! I'm Rahul founder of learnhindituts.com. Working in IT industry more than 4.5 years. I love to talk about programming as well as writing technical tutorials and blogs that can help to others .... keep learning :)

Get connected with me - LinkedIn Twitter Instagram Facebook

Your Thought ?

Please wait . . .

    0 Comment(s) found !