CSRF ਇੱਕ ਹਮਲਾਵਰ ਦੁਆਰਾ ਕੀਤੀ ਗਈ ਇੱਕ ਖਤਰਨਾਕ ਗਤੀਵਿਧੀ ਹੈ, ਜੋ ਇੱਕ ਪ੍ਰਮਾਣਿਤ ਉਪਭੋਗਤਾ ਦੀ ਤਰਫੋਂ ਕਾਰਵਾਈਆਂ ਕਰਦਾ ਹੈ, ਵੈੱਬ ਸੁਰੱਖਿਆ ਲਈ ਨੁਕਸਾਨਦੇਹ ਹੈ। ਖੁਸ਼ਕਿਸਮਤੀ ਨਾਲ, ਲਾਰਵੇਲ ਇਸ ਕਿਸਮ ਦੀ ਕਮਜ਼ੋਰੀ ਨੂੰ ਰੋਕਣ ਲਈ ਸਾਧਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
CSRF ਹਮਲੇ ਉਪਭੋਗਤਾ ਸੈਸ਼ਨਾਂ ਨੂੰ ਹਾਈਜੈਕ ਕਰਦਾ ਹੈ। ਉਹ ਉਪਭੋਗਤਾ ਦੀ ਜਾਣਕਾਰੀ ਤੋਂ ਬਿਨਾਂ ਲੁਕਵੇਂ ਫਾਰਮ ਟੈਗਸ ਜਾਂ ਖਤਰਨਾਕ URL (ਚਿੱਤਰਾਂ ਜਾਂ ਲਿੰਕਾਂ) ਦੁਆਰਾ ਬੇਨਤੀ ਦਰਜ ਕਰਨ ਲਈ ਉਪਭੋਗਤਾ ਨੂੰ ਧੋਖਾ ਦੇ ਕੇ ਅਜਿਹਾ ਕਰਦੇ ਹਨ।
ਇਹ ਹਮਲਾ ਉਪਭੋਗਤਾ ਸੈਸ਼ਨ ਦੀ ਸਥਿਤੀ, ਡੇਟਾ ਲੀਕ ਵਿੱਚ ਤਬਦੀਲੀ ਵੱਲ ਲੈ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਕਈ ਵਾਰ ਹੈਕਰ ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਅੰਤਮ ਉਪਭੋਗਤਾ ਡੇਟਾ ਨੂੰ ਹੇਰਾਫੇਰੀ ਕਰ ਸਕਦੇ ਹਨ।
ਉਪਰੋਕਤ ਚਿੱਤਰ ਇੱਕ ਦ੍ਰਿਸ਼ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ ਜਿੱਥੇ ਵੈੱਬ ਸੁਰੱਖਿਆ ਦੀ ਉਲੰਘਣਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਪੀੜਤ ਇੱਕ ਲਿੰਕ (ਪ੍ਰਾਪਤ) ਤੇ ਕਲਿਕ ਕਰਕੇ, ਇੱਕ ਵੈਬਸਾਈਟ ਸਰਵਰ ਨੂੰ ਇੱਕ ਬੇਨਤੀ ਭੇਜ ਕੇ ਇੱਕ ਬੇਨਤੀ ਭੇਜਦਾ ਹੈ ਜੋ ਹੈਕਰ ਦੁਆਰਾ ਲੋੜੀਂਦੇ ਪ੍ਰਭਾਵ ਪੈਦਾ ਕਰੇਗਾ, ਜੋ ਵੈਬਸਾਈਟ ਸਰਵਰ ਨੂੰ ਐਕਸੈਸ ਕਰਨ ਅਤੇ ਹੇਰਾਫੇਰੀ ਕਰਨ ਲਈ ਉਪਯੋਗੀ ਜਾਣਕਾਰੀ ਦੇ ਕਬਜ਼ੇ ਵਿੱਚ ਆਉਂਦਾ ਹੈ।
ਨੂੰ ਸੁਧਾਰਨ ਲਈ ਸੁਰੱਖਿਆ ਤੁਹਾਡੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਦਾ ਵੈੱਬ, ਹਰੇਕ ਉਪਭੋਗਤਾ ਸੈਸ਼ਨ ਵਿੱਚ, Laravel ਸੁਰੱਖਿਅਤ ਟੋਕਨ ਤਿਆਰ ਕਰਦਾ ਹੈ ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਵਰਤਦਾ ਹੈ ਕਿ ਪ੍ਰਮਾਣਿਤ ਉਪਭੋਗਤਾ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਬੇਨਤੀ ਕਰਨ ਵਾਲਾ ਹੈ।
ਕਿਉਂਕਿ ਇਹ ਟੋਕਨ ਹਰ ਵਾਰ ਜਦੋਂ ਇੱਕ ਉਪਭੋਗਤਾ ਸੈਸ਼ਨ ਦੁਬਾਰਾ ਤਿਆਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਬਦਲਦਾ ਹੈ, ਇੱਕ ਹਮਲਾਵਰ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ।
ਜਦੋਂ ਵੀ ਸਰਵਰ ਸਾਈਡ (ਬੈਕਐਂਡ) ਵਰਗੇ ਉਪਭੋਗਤਾਵਾਂ ਦੀ ਜਾਣਕਾਰੀ ਨੂੰ ਬਦਲਣ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ POST
, PUT
, PATCH
e DELETE
, ਤੁਹਾਨੂੰ ਨਿਰਦੇਸ਼ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ @csrf
ਬੇਨਤੀ ਫਾਰਮ ਵਿੱਚ blade
HTML. ਦ @csrf
ਇਸ ਲਈ ਇਹ ਇੱਕ ਨਿਰਦੇਸ਼ ਹੈ Blade
ਐਪਲੀਕੇਸ਼ਨ ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ ਇੱਕ ਲੁਕਿਆ ਹੋਇਆ ਟੋਕਨ ਬਣਾਉਣ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
ਨਿਰਦੇਸ਼ Blade
Laravel ਟੈਂਪਲੇਟ ਇੰਜਣ ਦੇ ਅੰਦਰ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਸੰਟੈਕਸ ਹੈ ਬਲੇਡ . ਇੱਕ ਫਾਈਲ ਬਣਾਉਣ ਲਈ 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
ਇਹ ਵੈੱਬ ਦੇ ਅੰਦਰ ਬੇਨਤੀਆਂ ਲਈ ਸ਼ੁਰੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, APIs ਨਾਲ ਸਬੰਧਤ ਨਹੀਂ।
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
ਜੇਕਰ ਦੋਵੇਂ ਸਤਰ ਬਰਾਬਰ ਹਨ ਤਾਂ ਤੁਲਨਾ ਕਰਨ ਲਈ PHP ਵਿੱਚ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਇਸ ਕਾਰਵਾਈ ਦਾ ਨਤੀਜਾ ਹਮੇਸ਼ਾ ਹੁੰਦਾ ਹੈ bool (ਸੱਚਾ) ਜਾਂ (ਗਲਤ) .
Ercole Palmeri
ਪਿਛਲੇ ਸੋਮਵਾਰ, ਫਾਈਨੈਂਸ਼ੀਅਲ ਟਾਈਮਜ਼ ਨੇ ਓਪਨਏਆਈ ਨਾਲ ਇੱਕ ਸੌਦੇ ਦਾ ਐਲਾਨ ਕੀਤਾ। FT ਆਪਣੀ ਵਿਸ਼ਵ ਪੱਧਰੀ ਪੱਤਰਕਾਰੀ ਨੂੰ ਲਾਇਸੰਸ ਦਿੰਦਾ ਹੈ...
ਲੱਖਾਂ ਲੋਕ ਸਟ੍ਰੀਮਿੰਗ ਸੇਵਾਵਾਂ ਲਈ ਭੁਗਤਾਨ ਕਰਦੇ ਹਨ, ਮਹੀਨਾਵਾਰ ਗਾਹਕੀ ਫੀਸ ਅਦਾ ਕਰਦੇ ਹਨ। ਇਹ ਆਮ ਰਾਏ ਹੈ ਕਿ ਤੁਸੀਂ…
Veeam ਦੁਆਰਾ Coveware ਸਾਈਬਰ ਜ਼ਬਰਦਸਤੀ ਘਟਨਾ ਪ੍ਰਤੀਕਿਰਿਆ ਸੇਵਾਵਾਂ ਪ੍ਰਦਾਨ ਕਰਨਾ ਜਾਰੀ ਰੱਖੇਗਾ। ਕੋਵਵੇਅਰ ਫੋਰੈਂਸਿਕ ਅਤੇ ਉਪਚਾਰ ਸਮਰੱਥਾਵਾਂ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰੇਗਾ...
ਪੂਰਵ-ਅਨੁਮਾਨਤ ਰੱਖ-ਰਖਾਅ ਪਲਾਂਟ ਪ੍ਰਬੰਧਨ ਲਈ ਇੱਕ ਨਵੀਨਤਾਕਾਰੀ ਅਤੇ ਕਿਰਿਆਸ਼ੀਲ ਪਹੁੰਚ ਦੇ ਨਾਲ, ਤੇਲ ਅਤੇ ਗੈਸ ਸੈਕਟਰ ਵਿੱਚ ਕ੍ਰਾਂਤੀ ਲਿਆ ਰਹੀ ਹੈ।…