Makaleler

Laravel Web Güvenliği: Siteler Arası İstek Sahtekarlığı (CSRF) Nedir?

Bu Laravel eğitiminde, Web Güvenliği ve bir web uygulamasının Siteler Arası İstek Sahteciliği veya CSRF saldırılarından nasıl korunacağı hakkında konuşuyoruz.

CSRF, kimliği doğrulanmış bir kullanıcı adına eylemler gerçekleştiren ve web güvenliğine zarar veren bir saldırgan tarafından gerçekleştirilen kötü amaçlı bir etkinliktir. Neyse ki, Laravel bu tür bir güvenlik açığını önleyecek araçları sağlar.

CSRF nedir?

CSRF saldırıları, kullanıcı oturumlarını ele geçirir. Bunu, kullanıcının bilgisi olmadan gizli form etiketleri veya kötü amaçlı URL'ler (resimler veya bağlantılar) aracılığıyla bir istek göndermesi için kullanıcıyı kandırarak yaparlar.

Bu saldırı, kullanıcı oturum durumunda değişikliğe, veri sızıntılarına yol açar ve bazen bilgisayar korsanları bir uygulamadaki son kullanıcı verilerini manipüle edebilir.

Yukarıdaki görüntü, web güvenliğinin ihlal edildiği bir senaryoyu göstermektedir. Kurban, bir bağlantıya (alınan) tıklayarak bir istek gönderir, bir web sitesi sunucusuna, web sitesi sunucusuna erişmek ve onu manipüle etmek için yararlı bilgilere sahip olan hacker tarafından istenen etkileri üretecek bir istek gönderir.

CSRF istekleri nasıl engellenir?

Geliştirmek için güvenlik uygulamalarınızın web'inde, her kullanıcı oturumunda Laravel, kimliği doğrulanmış kullanıcının uygulamayı talep eden kişi olduğundan emin olmak için kullandığı güvenli belirteçler oluşturur.

Bu belirteç, bir kullanıcı oturumu her yeniden oluşturulduğunda değiştiğinden, bir saldırgan buna erişemez.

Gibi sunucu tarafında (arka uç) kullanıcı bilgilerini değiştirmek için bir istek olduğunda POSTPUTPATCHDELETE, direktifi eklemelisiniz @csrf istek formunda blade HTML. bu @csrf bu nedenle bir direktiftir Blade uygulama tarafından doğrulanan gizli bir belirteç oluşturmak için kullanılır.

Direktif Blade adlı laravel şablon motorunda kullanılan sözdizimidir. kılıç . dosya oluşturmak için blade ona - bizim durumumuzda - bir isim vermeli ve ardından bıçağın uzantısını vermelisiniz. Bu, dosyanın isme sahip olacağı anlamına gelir. form.blade.php.

dosya kullanılır blade web sayfasındaki kullanıcılar için görünümler oluşturmak için birkaç ön yönerge vardır.definite veya blade steno sözdizimini kullanabilirsiniz. Örneğin, @if bir koşulun karşılanıp karşılanmadığını kontrol edin, @empty kayıtların boş olup olmadığını kontrol edin, @auth bir kullanıcının kimliğinin doğrulanıp doğrulanmadığını vb. kontrol edin.

Ama direktife geri dönelim @csrf. Bunu nasıl kullanacağınız aşağıda açıklanmıştır:

<form method="POST" action="{{route('pay')}}">

    @csrf
    
</form>

Laravel'in önceki sürümleri farklı bir kuruluma sahipti: ikisi de çalışıyor ve aynı şeyi yapıyor.

İnovasyon bülteni
İnovasyonla ilgili en önemli haberleri kaçırmayın. Onları e-posta ile almak için kaydolun.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Gönderilen form isteğinde CSRF belirteci eksik olduğunda veya geçersiz göründüğünde, Laravel 419 durum koduyla "Sayfa Süresi Doldu" hata mesajı atar.

CSRF doğrulaması nasıl ve nerede gerçekleşir?

ara yazılım VerifyCsrfToken Laravel uygulaması içinde CSRF doğrulamasını gerçekleştirir. bu middleware kayıtlı Kernel.php ve dizinde bulunur app/Http/Middleware. Bu şu anlama gelir: middleware API'lerle ilgili olmayan web içindeki istekler için tetiklenir.

protected $middlewareGroups = [
        'web' => [
           .
           .
           .
           .
           .
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
    ];

VerifyCsrfToken ara yazılımı, sınıfı genişletir Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, yani CSRF doğrulaması defisınıf içinde gece.

Laravel'in CSRF doğrulamasını nasıl ele aldığını öğrenmek için daha derine inelim.

Sınıfın içinde, işlevimiz var tokensMatch.

protected function tokensMatch($request)
{
     $token = $this->getTokenFromRequest($request);

     return is_string($request->session()->token()) &&
            is_string($token) &&
            hash_equals($request->session()->token(), $token);
}

kod, oturumun ve giriş CSRF belirteçlerinin eşleşip eşleşmediğini belirler.

İşlev iki şey yapar:

  1. elde etmek $this->getTokenFromRequest gizli bir alan veya istek başlığı aracılığıyla eklenen gelen istekten gelen belirteç. Jetonun şifresi çözülür ve ardından jeton değişkenine geri gönderilir.
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;
}

Kodda, başlıktan belirteç alır

2. Hem istek belirtecini hem de oturumu bir dizeye aktarın ve ardından şunu kullanın: hash_equals her iki dizenin eşit olup olmadığını karşılaştırmak için PHP'de yerleşiktir. Bu işlemin sonucu her zaman bool (doğru) veya (yanlış) .

Ercole Palmeri

İnovasyon bülteni
İnovasyonla ilgili en önemli haberleri kaçırmayın. Onları e-posta ile almak için kaydolun.

Son Makaleler

Excel'de veriler nasıl birleştirilir

Herhangi bir ticari operasyon, farklı biçimlerde bile çok fazla veri üretir. Bu verileri bir Excel sayfasından manuel olarak girin…

14 Mayıs 2024

Cisco Talos'un üç aylık analizi: suçluların hedef aldığı kurumsal e-postalar Üretim, Eğitim ve Sağlık Hizmetleri en çok etkilenen sektörlerdir

Şirket e-postalarının ele geçirilmesi, 2024 yılının ilk üç ayında son çeyreğe kıyasla iki kattan fazla arttı…

14 Mayıs 2024

Arayüz ayırma ilkesi (ISP), dördüncü SOLID ilkesi

Arayüz ayrımı ilkesi, nesne yönelimli tasarımın beş SOLID ilkesinden biridir. Bir sınıfın olması gerekir…

14 Mayıs 2024

İyi bir analiz için verileri ve formülleri Excel'de en iyi şekilde nasıl organize edebilirsiniz?

Microsoft Excel, veri analizi için referans aracıdır, çünkü veri kümelerini düzenlemek için birçok özellik sunar,…

14 Mayıs 2024

İki önemli Walliance Equity Kitlesel Fonlama projesi için olumlu sonuç: Jesolo Wave Island ve Milano Via Ravenna

2017 yılından bu yana Gayrimenkul Kitlesel Fonlaması alanında Avrupa'nın liderleri arasında yer alan Walliance, SIM ve platform, tamamlandığını duyurdu…

13 Mayıs 2024

Filament nedir ve Laravel Filament nasıl kullanılır?

Filament, çeşitli tam yığın bileşenleri sağlayan "hızlandırılmış" bir Laravel geliştirme çerçevesidir. İşlemleri basitleştirmek için tasarlanmıştır…

13 Mayıs 2024

Yapay Zekaların kontrolü altında

«Evrimimi tamamlamak için geri dönmeliyim: Kendimi bilgisayarın içine yansıtacağım ve saf enerjiye dönüşeceğim. Bir kez yerleştikten sonra…

10 Mayıs 2024

Google'ın yeni yapay zekası DNA, RNA ve "hayatın tüm moleküllerini" modelleyebiliyor

Google DeepMind, yapay zeka modelinin geliştirilmiş bir versiyonunu sunuyor. Yeni geliştirilmiş model yalnızca…

9 Mayıs 2024