CSRF एक हमलावर द्वारा की गई दुर्भावनापूर्ण गतिविधि है, जो एक प्रमाणित उपयोगकर्ता की ओर से कार्य करता है, जो वेब सुरक्षा के लिए हानिकारक है। सौभाग्य से, Laravel इस प्रकार की भेद्यता को रोकने के लिए उपकरण प्रदान करता है।
CSRF उपयोगकर्ता सत्रों को हाईजैक करता है। वे उपयोगकर्ता की जानकारी के बिना किसी उपयोगकर्ता को छिपे हुए फ़ॉर्म टैग या दुर्भावनापूर्ण URL (चित्र या लिंक) के माध्यम से अनुरोध सबमिट करने के लिए बरगला कर ऐसा करते हैं।
इस हमले से उपयोगकर्ता सत्र स्थिति में परिवर्तन होता है, डेटा लीक होता है, और कभी-कभी हैकर्स किसी एप्लिकेशन में अंतिम-उपयोगकर्ता डेटा में हेरफेर कर सकते हैं।
ऊपर दी गई छवि एक ऐसे परिदृश्य को दर्शाती है जहां वेब सुरक्षा का उल्लंघन होता है। पीड़ित एक लिंक (प्राप्त) पर क्लिक करके एक अनुरोध भेजता है, एक वेबसाइट सर्वर को एक अनुरोध भेजता है जो हैकर द्वारा वांछित प्रभाव उत्पन्न करेगा, जो वेबसाइट सर्वर तक पहुंचने और हेरफेर करने के लिए उपयोगी जानकारी के कब्जे में आता है।
इसे सुधारने के लिए सुरक्षा प्रत्येक उपयोगकर्ता सत्र में, Laravel सुरक्षित टोकन उत्पन्न करता है जिसका उपयोग यह सुनिश्चित करने के लिए करता है कि प्रमाणित उपयोगकर्ता ही एप्लिकेशन का अनुरोध कर रहा है।
क्योंकि यह टोकन हर बार एक उपयोगकर्ता सत्र के पुन: उत्पन्न होने पर बदल जाता है, एक हमलावर इसे एक्सेस नहीं कर सकता है।
जब भी सर्वर साइड (बैकएंड) पर उपयोगकर्ता की जानकारी बदलने का अनुरोध किया जाता है POST
, PUT
, PATCH
e DELETE
, आपको निर्देश शामिल करना होगा @csrf
अनुरोध प्रपत्र में blade
एचटीएमएल। @csrf
इसलिए यह एक निर्देश है Blade
एप्लिकेशन द्वारा मान्य एक छिपे हुए टोकन को उत्पन्न करने के लिए उपयोग किया जाता है।
निर्देश Blade
Laravel टेम्पलेट इंजन के भीतर उपयोग किया जाने वाला सिंटैक्स है जिसे कहा जाता है ब्लेड . फाइल बनाने के लिए blade
आपको इसे एक नाम देना होगा - हमारे केस फॉर्म में - इसके बाद ब्लेड का विस्तार। इसका मतलब है कि फ़ाइल का नाम होगा form.blade.php
.
फाइल का उपयोग किया जाता है blade
वेब पेज पर उपयोगकर्ताओं के लिए दृश्य प्रस्तुत करने के लिए। कुछ पूर्व-निर्देश हैंdefiनाइट या ब्लेड शॉर्टहैंड सिंटैक्स का आप उपयोग कर सकते हैं। उदाहरण के लिए, @if
जांचें कि क्या कोई शर्त संतुष्ट है, @empty
जांचें कि क्या रिकॉर्ड खाली नहीं हैं, @auth
जांचें कि क्या उपयोगकर्ता प्रमाणित है और इसी तरह।
लेकिन चलिए निर्देश पर वापस जाते हैं @csrf
. यहां बताया गया है कि आप इसका उपयोग कैसे करते हैं:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
लारवेल के पिछले संस्करणों में एक अलग सेटअप था: वे दोनों काम करते हैं और एक ही काम करते हैं।
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
जब सबमिट किए जा रहे फॉर्म अनुरोध से CSRF टोकन गुम हो जाता है या यदि यह अमान्य प्रतीत होता है, तो Laravel 419 स्थिति कोड के साथ एक "पृष्ठ समाप्त" त्रुटि संदेश फेंकता है।
मिडलवेयर VerifyCsrfToken
Laravel एप्लिकेशन के भीतर CSRF सत्यापन को संभालता है। middleware
में पंजीकृत है Kernel.php
और निर्देशिका में स्थित है app/Http/Middleware
. इसका मतलब है कि middleware
यह वेब के भीतर अनुरोधों के लिए ट्रिगर किया गया है, जो एपीआई से संबंधित नहीं है।
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
VerifyCsrfToken मिडलवेयर वर्ग का विस्तार करता है Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, यानी सीएसआरएफ सत्यापन है defiकक्षा के भीतर रात्रि.
आइए जानें कि Laravel CSRF सत्यापन को कैसे संभालता है।
कक्षा के अंदर, हमारे पास कार्य है tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
कोड में यह निर्धारित करता है कि सत्र और इनपुट सीएसआरएफ टोकन मेल खाते हैं या नहीं।
समारोह दो काम करता है:
$this->getTokenFromRequest
एक छिपे हुए क्षेत्र या अनुरोध शीर्षलेख के माध्यम से संलग्न आने वाले अनुरोध से टोकन। टोकन डिक्रिप्ट किया गया है और फिर टोकन चर पर वापस आ गया है।protected function getTokenFromRequest($request)
{
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
try {
$token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized()));
} catch (DecryptException $e) {
$token = '';
}
}
return $token;
}
कोड में इसे हेडर से टोकन मिलता है
2. अनुरोध टोकन और सत्र दोनों को एक स्ट्रिंग में कास्ट करें और फिर उपयोग करें hash_equals
अगर दोनों तार बराबर हैं तो तुलना करने के लिए PHP में बनाया गया है। इस ऑपरेशन का नतीजा हमेशा होता है बूल (सच) या (झूठा) .
Ercole Palmeri
रंग भरने के माध्यम से बढ़िया मोटर कौशल विकसित करना बच्चों को लेखन जैसे अधिक जटिल कौशल के लिए तैयार करता है। रंग भरना…
नौसैनिक क्षेत्र एक सच्ची वैश्विक आर्थिक शक्ति है, जो 150 अरब के बाज़ार की ओर बढ़ चुका है...
पिछले सोमवार को, फाइनेंशियल टाइम्स ने OpenAI के साथ एक समझौते की घोषणा की। एफटी अपनी विश्व स्तरीय पत्रकारिता को लाइसेंस देता है...
लाखों लोग स्ट्रीमिंग सेवाओं के लिए मासिक सदस्यता शुल्क का भुगतान करते हैं। यह आम राय है कि आप...