Артиколи

Laravel веб-қауіпсіздігі: Сайтаралық сұрауды жалған жасау (CSRF) дегеніміз не?

Бұл Laravel оқулығында біз веб-қауіпсіздік туралы және веб-қосымшаны сайттар аралық сұрауды жалған жасаудан немесе CSRF шабуылдарынан қорғау туралы сөйлесеміз.

CSRF – аутентификацияланған пайдаланушы атынан веб-қауіпсіздікке нұқсан келтіретін әрекеттерді жасайтын шабуылдаушы орындайтын зиянды әрекет. Бақытымызға орай, Laravel осалдықтың осы түрін болдырмау үшін құралдарды ұсынады.

CSRF дегеніміз не?

CSRF пайдаланушы сеанстарын ұрлайды. Олар мұны жасырын пішін тегтері немесе зиянды URL мекенжайлары (суреттер немесе сілтемелер) арқылы пайдаланушыны білместен сұрауды жіберуге алдап жібереді.

Бұл шабуыл пайдаланушы сеансы күйінің өзгеруіне, деректердің ағып кетуіне әкеледі және кейде хакерлер қолданбадағы соңғы пайдаланушы деректерін басқара алады.

Жоғарыдағы сурет веб қауіпсіздігі бұзылған сценарийді көрсетеді. Жәбірленуші веб-сайт серверіне кіру және манипуляциялау үшін пайдалы ақпаратты иемденетін хакер қалаған әсерлерді беретін веб-сайт серверіне сұрау жіберу арқылы (алынған) сілтемені басу арқылы сұрау жібереді.

CSRF сұрауларын қалай болдырмауға болады

жақсарту үшін қауіпсіздік қолданбаларыңыздың веб-сайтында әрбір пайдаланушы сеансында Laravel аутентификацияланған пайдаланушы қолданбаны сұрайтын адам екеніне көз жеткізу үшін пайдаланатын қауіпсіз таңбалауыштарды жасайды.

Бұл таңбалауыш пайдаланушы сеансы қайта жасалған сайын өзгеретіндіктен, шабуылдаушы оған қол жеткізе алмайды.

Сервер жағында (backend) пайдаланушы ақпаратын өзгертуге сұраныс болған кезде POSTPUTPATCHDELETE, директиваны қамтуыңыз керек @csrf сұрау нысанында blade HTML. The @csrf сондықтан ол директива болып табылады Blade қолданба арқылы расталған жасырын таңбалауышты жасау үшін пайдаланылады.

Директивасы Blade деп аталатын Laravel үлгі механизмінде қолданылатын синтаксис жүзі . Файл жасау үшін blade сіз оған атау беруіңіз керек - біздің жағдайда - пышақтың ұзартылуынан кейін. Бұл файлдың аты болатынын білдіреді form.blade.php.

Файл пайдаланылады blade веб-беттегі пайдаланушылардың көріністерін көрсету.Бірнеше алдын ала нұсқау барdefinite немесе blade стенографиясын пайдалануға болады. Мысалы, @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 күй коды бар «Бет мерзімі бітті» қате хабарын шығарады.

CSRF тексеруі қалай және қайда өтеді

Орташа бағдарламалық құрал VerifyCsrfToken Laravel қолданбасында CSRF тексеруін өңдейді. The 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 таңбалауыштары сәйкес келетінін анықтайды.

Функция екі нәрсені жасайды:

  1. алу $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

Инновациялық ақпараттық бюллетень
Инновация туралы ең маңызды жаңалықтарды жіберіп алмаңыз. Оларды электрондық пошта арқылы алу үшін тіркеліңіз.

Соңғы мақалалар

Баспагерлер мен OpenAI жасанды интеллект өңдейтін ақпарат ағынын реттеу үшін келісімдерге қол қояды.

Өткен дүйсенбіде Financial Times OpenAI-мен келісім туралы жариялады. FT өзінің әлемдік деңгейдегі журналистикасына лицензия береді…

30 Сәуір 2024

Онлайн төлемдер: Міне, ағынды қызметтер сізге мәңгілік төлем жасауға мүмкіндік береді

Миллиондаған адамдар ай сайынғы абоненттік төлемді төлей отырып, ағынды қызметтерге ақы төлейді. Жалпы пікір, сіз…

29 Сәуір 2024

Veeam қорғаныстан жауап беруге және қалпына келтіруге дейін төлемдік бағдарламалық құралға ең жан-жақты қолдау көрсетеді

Veeam ұсынған Coveware кибербопсалау оқиғаларына жауап беру қызметтерін көрсетуді жалғастырады. Coveware криминалистикалық және қалпына келтіру мүмкіндіктерін ұсынады ...

23 Сәуір 2024

Жасыл және цифрлық революция: болжамды техникалық қызмет көрсету мұнай және газ саласын қалай өзгертеді

Болжалды техникалық қызмет көрсету зауытты басқаруға инновациялық және белсенді көзқараспен мұнай және газ секторында төңкеріс жасайды.…

22 Сәуір 2024

Инновацияны өз тіліңізде оқыңыз

Инновациялық ақпараттық бюллетень
Инновация туралы ең маңызды жаңалықтарды жіберіп алмаңыз. Оларды электрондық пошта арқылы алу үшін тіркеліңіз.

Артымыздан