CSRF হল একজন আক্রমণকারীর দ্বারা সম্পাদিত একটি দূষিত কার্যকলাপ, যিনি একজন প্রমাণীকৃত ব্যবহারকারীর পক্ষে কাজ করে, যা ওয়েব নিরাপত্তার জন্য ক্ষতিকর। সৌভাগ্যবশত, লারাভেল এই ধরনের দুর্বলতা প্রতিরোধ করার জন্য সরঞ্জাম সরবরাহ করে।
CSRF আক্রমণ ব্যবহারকারী সেশন হাইজ্যাক. তারা ব্যবহারকারীর অজান্তেই লুকানো ফর্ম ট্যাগ বা ক্ষতিকারক URL (ছবি বা লিঙ্ক) এর মাধ্যমে একটি অনুরোধ জমা দেওয়ার জন্য ব্যবহারকারীকে প্রতারণা করে এটি করে।
এই আক্রমণটি ব্যবহারকারীর সেশনের অবস্থার পরিবর্তনের দিকে নিয়ে যায়, ডেটা ফাঁস করে এবং কখনও কখনও হ্যাকাররা একটি অ্যাপ্লিকেশনে শেষ-ব্যবহারকারীর ডেটা ম্যানিপুলেট করতে পারে।
উপরের চিত্রটি এমন একটি দৃশ্যকে চিত্রিত করে যেখানে ওয়েব নিরাপত্তা লঙ্ঘিত হয়। ভিকটিম একটি লিঙ্কে ক্লিক করে (প্রাপ্ত) একটি অনুরোধ পাঠায়, একটি ওয়েবসাইট সার্ভারে একটি অনুরোধ পাঠায় যা হ্যাকার দ্বারা পছন্দসই প্রভাব তৈরি করবে, যারা ওয়েবসাইট সার্ভার অ্যাক্সেস এবং ম্যানিপুলেট করার জন্য দরকারী তথ্যের দখলে আসে।
উন্নত করতে নিরাপত্তা আপনার অ্যাপ্লিকেশনের ওয়েব, প্রতিটি ব্যবহারকারীর সেশনে, লারাভেল নিরাপদ টোকেন তৈরি করে যা এটি নিশ্চিত করতে ব্যবহার করে যে প্রমাণীকৃত ব্যবহারকারীই আবেদনের অনুরোধ করছেন।
যেহেতু এই টোকেনটি প্রতিবার ব্যবহারকারীর সেশন পুনরুত্পাদিত হওয়ার সময় পরিবর্তিত হয়, আক্রমণকারী এটি অ্যাক্সেস করতে পারে না।
যখনই সার্ভার সাইড (ব্যাকএন্ড) লাইক ব্যবহারকারীর তথ্য পরিবর্তন করার অনুরোধ আসে POST
, PUT
, PATCH
e DELETE
, আপনাকে অবশ্যই নির্দেশ অন্তর্ভুক্ত করতে হবে @csrf
অনুরোধ ফর্মে blade
এইচটিএমএল দ্য @csrf
তাই এটি একটি নির্দেশনা Blade
অ্যাপ্লিকেশন দ্বারা যাচাইকৃত একটি লুকানো টোকেন তৈরি করতে ব্যবহৃত হয়।
নির্দেশ Blade
লারাভেল টেমপ্লেট ইঞ্জিনের মধ্যে ব্যবহৃত সিনট্যাক্স বলা হয় ব্লেড . একটি ফাইল তৈরি করতে 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
এটি ওয়েবের মধ্যে অনুরোধের জন্য ট্রিগার করা হয়, API-এর সাথে সম্পর্কিত নয়।
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
VerifyCsrfToken মিডলওয়্যার ক্লাস প্রসারিত করে Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, অর্থাৎ CSRF যাচাইকরণ defiক্লাসের মধ্যে নাইটি।
লারাভেল কীভাবে 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);
}
কোডে সেশন এবং ইনপুট CSRF টোকেন মিলছে কিনা তা নির্ধারণ করে।
ফাংশন দুটি জিনিস করে:
$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
উভয় স্ট্রিং সমান হলে তুলনা করার জন্য পিএইচপি-তে নির্মিত। এই অপারেশনের ফলাফল সবসময় বুল (সত্য) বা (মিথ্যা) .
Ercole Palmeri
অ্যাপল ভিশন প্রো কমার্শিয়াল ভিউয়ার ব্যবহার করে ক্যাটানিয়া পলিক্লিনিকে একটি চক্ষুরোগ অপারেশন করা হয়েছিল...
রঙের মাধ্যমে সূক্ষ্ম মোটর দক্ষতার বিকাশ শিশুদের লেখার মতো জটিল দক্ষতার জন্য প্রস্তুত করে। রঙ…
নৌ সেক্টর একটি সত্যিকারের বৈশ্বিক অর্থনৈতিক শক্তি, যা 150 বিলিয়ন বাজারের দিকে নেভিগেট করেছে...
গত সোমবার, ফাইন্যান্সিয়াল টাইমস ওপেনএআই-এর সাথে একটি চুক্তি ঘোষণা করেছে। FT তার বিশ্বমানের সাংবাদিকতার লাইসেন্স দেয়...