CSRF ಎನ್ನುವುದು ಆಕ್ರಮಣಕಾರರಿಂದ ನಿರ್ವಹಿಸಲ್ಪಡುವ ದುರುದ್ದೇಶಪೂರಿತ ಚಟುವಟಿಕೆಯಾಗಿದ್ದು, ಅವರು ಅಧಿಕೃತ ಬಳಕೆದಾರರ ಪರವಾಗಿ ಕ್ರಿಯೆಗಳನ್ನು ಮಾಡುತ್ತಾರೆ, ವೆಬ್ ಭದ್ರತೆಗೆ ಹಾನಿಕಾರಕವಾಗಿದೆ. ಅದೃಷ್ಟವಶಾತ್, ಲಾರಾವೆಲ್ ಈ ರೀತಿಯ ದುರ್ಬಲತೆಯನ್ನು ತಡೆಯಲು ಸಾಧನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.
CSRF ದಾಳಿಯು ಬಳಕೆದಾರರ ಸೆಷನ್ಗಳನ್ನು ಹೈಜಾಕ್ ಮಾಡುತ್ತದೆ. ಬಳಕೆದಾರರ ಅರಿವಿಲ್ಲದೆ ಗುಪ್ತ ಫಾರ್ಮ್ ಟ್ಯಾಗ್ಗಳು ಅಥವಾ ದುರುದ್ದೇಶಪೂರಿತ URL ಗಳ (ಚಿತ್ರಗಳು ಅಥವಾ ಲಿಂಕ್ಗಳು) ಮೂಲಕ ವಿನಂತಿಯನ್ನು ಸಲ್ಲಿಸಲು ಬಳಕೆದಾರರನ್ನು ಮೋಸಗೊಳಿಸುವ ಮೂಲಕ ಅವರು ಇದನ್ನು ಮಾಡುತ್ತಾರೆ.
ಈ ದಾಳಿಯು ಬಳಕೆದಾರರ ಸೆಶನ್ ಸ್ಥಿತಿಯಲ್ಲಿ ಬದಲಾವಣೆಗೆ ಕಾರಣವಾಗುತ್ತದೆ, ಡೇಟಾ ಸೋರಿಕೆಗಳು ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಹ್ಯಾಕರ್ಗಳು ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ಅಂತಿಮ ಬಳಕೆದಾರರ ಡೇಟಾವನ್ನು ಕುಶಲತೆಯಿಂದ ನಿರ್ವಹಿಸಬಹುದು.
ಮೇಲಿನ ಚಿತ್ರವು ವೆಬ್ ಭದ್ರತೆಯನ್ನು ಉಲ್ಲಂಘಿಸುವ ಸನ್ನಿವೇಶವನ್ನು ವಿವರಿಸುತ್ತದೆ. ಬಲಿಪಶು ಲಿಂಕ್ (ಸ್ವೀಕರಿಸಲಾಗಿದೆ) ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸುತ್ತಾರೆ, ವೆಬ್ಸೈಟ್ ಸರ್ವರ್ಗೆ ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸುತ್ತಾರೆ, ಅದು ಹ್ಯಾಕರ್ನಿಂದ ಬಯಸಿದ ಪರಿಣಾಮಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ, ಅವರು ವೆಬ್ಸೈಟ್ ಸರ್ವರ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಮತ್ತು ಕುಶಲತೆಯಿಂದ ನಿರ್ವಹಿಸಲು ಉಪಯುಕ್ತವಾದ ಮಾಹಿತಿಯನ್ನು ಸ್ವಾಧೀನಪಡಿಸಿಕೊಳ್ಳುತ್ತಾರೆ.
ಸುಧಾರಿಸಲು ಭದ್ರತಾ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳ ವೆಬ್, ಪ್ರತಿ ಬಳಕೆದಾರ ಸೆಶನ್ನಲ್ಲಿ, ಲಾರಾವೆಲ್ ಸುರಕ್ಷಿತ ಟೋಕನ್ಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ, ಇದು ದೃಢೀಕೃತ ಬಳಕೆದಾರರೇ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ವಿನಂತಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಬಳಸುತ್ತದೆ.
ಈ ಟೋಕನ್ ಪ್ರತಿ ಬಾರಿ ಬಳಕೆದಾರರ ಸೆಶನ್ ಅನ್ನು ಮರುಸೃಷ್ಟಿಸಿದಾಗ ಬದಲಾಗುವುದರಿಂದ, ಆಕ್ರಮಣಕಾರರು ಅದನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.
ಸರ್ವರ್ ಸೈಡ್ (ಬ್ಯಾಕೆಂಡ್) ನಲ್ಲಿ ಬಳಕೆದಾರರ ಮಾಹಿತಿಯನ್ನು ಬದಲಾಯಿಸಲು ವಿನಂತಿಯು ಇದ್ದಾಗಲೆಲ್ಲಾ POST
, PUT
, PATCH
e DELETE
, ನೀವು ನಿರ್ದೇಶನವನ್ನು ಒಳಗೊಂಡಿರಬೇಕು @csrf
ವಿನಂತಿಯ ರೂಪದಲ್ಲಿ blade
HTML. ದಿ @csrf
ಆದ್ದರಿಂದ ಇದು ನಿರ್ದೇಶನವಾಗಿದೆ Blade
ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಮೌಲ್ಯೀಕರಿಸಲಾದ ಗುಪ್ತ ಟೋಕನ್ ಅನ್ನು ರಚಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ.
ನಿರ್ದೇಶನ Blade
ಲಾರಾವೆಲ್ ಟೆಂಪ್ಲೇಟ್ ಎಂಜಿನ್ನಲ್ಲಿ ಸಿಂಟ್ಯಾಕ್ಸ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಬ್ಲೇಡ್ . ಫೈಲ್ ರಚಿಸಲು blade
ನೀವು ಅದಕ್ಕೆ ಹೆಸರನ್ನು ನೀಡಬೇಕು - ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ ರೂಪದಲ್ಲಿ - ಬ್ಲೇಡ್ನ ವಿಸ್ತರಣೆಯ ನಂತರ. ಇದರರ್ಥ ಫೈಲ್ ಹೆಸರನ್ನು ಹೊಂದಿರುತ್ತದೆ form.blade.php
.
ಫೈಲ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ blade
ವೆಬ್ ಪುಟದಲ್ಲಿ ಬಳಕೆದಾರರಿಗೆ ವೀಕ್ಷಣೆಗಳನ್ನು ಸಲ್ಲಿಸಲು. ಒಂದೆರಡು ಪೂರ್ವ ನಿರ್ದೇಶನಗಳಿವೆdefiನೈಟ್ ಅಥವಾ ಬ್ಲೇಡ್ ಶಾರ್ಟ್ಹ್ಯಾಂಡ್ ಸಿಂಟ್ಯಾಕ್ಸ್ ಅನ್ನು ನೀವು ಬಳಸಬಹುದು. ಉದಾಹರಣೆಗೆ, @if
ಒಂದು ಸ್ಥಿತಿಯನ್ನು ತೃಪ್ತಿಪಡಿಸಲಾಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ, @empty
ದಾಖಲೆಗಳು ಖಾಲಿಯಾಗಿಲ್ಲವೇ ಎಂದು ಪರಿಶೀಲಿಸಿ @auth
ಬಳಕೆದಾರನು ದೃಢೀಕರಿಸಲ್ಪಟ್ಟಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಹೀಗೆ.
ಆದರೆ ನಿರ್ದೇಶನಕ್ಕೆ ಹಿಂತಿರುಗಿ ನೋಡೋಣ @csrf
. ನೀವು ಅದನ್ನು ಹೇಗೆ ಬಳಸುತ್ತೀರಿ ಎಂಬುದು ಇಲ್ಲಿದೆ:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Laravel ನ ಹಿಂದಿನ ಆವೃತ್ತಿಗಳು ವಿಭಿನ್ನ ಸೆಟಪ್ ಅನ್ನು ಹೊಂದಿದ್ದವು: ಎರಡೂ ಕೆಲಸ ಮಾಡುತ್ತವೆ ಮತ್ತು ಒಂದೇ ಕೆಲಸವನ್ನು ಮಾಡುತ್ತವೆ.
<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ತರಗತಿಯೊಳಗೆ ರಾತ್ರಿ.
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);
}
ಸೆಷನ್ ಮತ್ತು ಇನ್ಪುಟ್ 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
ಎರಡೂ ತಂತಿಗಳು ಸಮಾನವಾಗಿದ್ದರೆ ಹೋಲಿಸಲು PHP ಯಲ್ಲಿ ನಿರ್ಮಿಸಲಾಗಿದೆ. ಈ ಕಾರ್ಯಾಚರಣೆಯ ಫಲಿತಾಂಶವು ಯಾವಾಗಲೂ ಇರುತ್ತದೆ bool (ನಿಜ) ಅಥವಾ (ಸುಳ್ಳು) .
Ercole Palmeri
ಬಣ್ಣಗಳ ಮೂಲಕ ಉತ್ತಮವಾದ ಮೋಟಾರು ಕೌಶಲ್ಯಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದು ಬರವಣಿಗೆಯಂತಹ ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಕೌಶಲ್ಯಗಳಿಗೆ ಮಕ್ಕಳನ್ನು ಸಿದ್ಧಪಡಿಸುತ್ತದೆ. ಬಣ್ಣ ಹಾಕಲು...
ನೌಕಾ ವಲಯವು ನಿಜವಾದ ಜಾಗತಿಕ ಆರ್ಥಿಕ ಶಕ್ತಿಯಾಗಿದೆ, ಇದು 150 ಶತಕೋಟಿ ಮಾರುಕಟ್ಟೆಯತ್ತ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿದೆ...
ಕಳೆದ ಸೋಮವಾರ, ಫೈನಾನ್ಶಿಯಲ್ ಟೈಮ್ಸ್ ಓಪನ್ ಎಐ ಜೊತೆ ಒಪ್ಪಂದವನ್ನು ಪ್ರಕಟಿಸಿತು. FT ತನ್ನ ವಿಶ್ವ ದರ್ಜೆಯ ಪತ್ರಿಕೋದ್ಯಮಕ್ಕೆ ಪರವಾನಗಿ ನೀಡುತ್ತದೆ…
ಲಕ್ಷಾಂತರ ಜನರು ಸ್ಟ್ರೀಮಿಂಗ್ ಸೇವೆಗಳಿಗೆ ಪಾವತಿಸುತ್ತಾರೆ, ಮಾಸಿಕ ಚಂದಾದಾರಿಕೆ ಶುಲ್ಕವನ್ನು ಪಾವತಿಸುತ್ತಾರೆ. ನೀವು ಎಂಬುದು ಸಾಮಾನ್ಯ ಅಭಿಪ್ರಾಯ…