Laravel - CSRF Koruması

CSRF, web uygulamalarında Siteler Arası Sahtecilik saldırılarını ifade eder. CSRF saldırıları, sistemin kimliği doğrulanmış kullanıcılarının gerçekleştirdiği yetkisiz faaliyetlerdir. Bu nedenle, birçok web uygulaması bu saldırılara eğilimlidir.

Laravel aşağıdaki şekilde CSRF koruması sunar -

Laravel, her aktif kullanıcı oturumu için belirteçler oluşturan yerleşik bir CSRF eklentisi içerir. Bu belirteçler, işlemlerin veya taleplerin ilgili kimliği doğrulanmış kullanıcı tarafından gönderildiğini doğrular.

Uygulama

Laravel'de CSRF korumasının uygulanması bu bölümde ayrıntılı olarak tartışılmaktadır. CSRF korumasına devam etmeden önce aşağıdaki noktalar dikkate değerdir -

  • CSRF, web uygulamaları içinde açıklanan HTML formları içinde uygulanır. Laravel'in CSRF koruma ara yazılımının isteği doğrulayabilmesi için forma gizli bir doğrulanmış CSRF belirteci eklemeniz gerekir. Sözdizimi aşağıda gösterilmiştir -

<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • Her giden istek için CSRF belirteci içerdiğinden, JavaScript HTTP kitaplığını kullanarak kolayca JavaScript tabanlı uygulamalar oluşturabilirsiniz.

  • Dosya yani resources/assets/js/bootstrap.js Laravel uygulamaları için tüm belirteçleri kaydeder ve şunları içerir: meta depolayan etiketi csrf-token ile Axios HTTP library.

CSRF belirteci olmayan form

Aşağıdaki kod satırlarını düşünün. Giriş olarak iki parametre alan bir form gösterirler:email ve message.

<form>
   <label> Email </label>
      <input type = "text" name = "email"/>
      <br/>
   <label> Message </label> <input type="text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

Yukarıdaki kodun sonucu, aşağıda gösterilen ve son kullanıcının görüntüleyebileceği formdur -

Yukarıda gösterilen form, yetkili bir kullanıcıdan gelen tüm giriş bilgilerini kabul edecektir. Bu, web uygulamasını çeşitli saldırılara açık hale getirebilir.

Gönder düğmesinin denetleyici bölümünde işlevsellik içerdiğini lütfen unutmayın. postContactişlevi, ilgili görünümler için denetleyicilerde kullanılır. Aşağıda gösterilmiştir -

public function postContact(Request $request) {
   return $request-> all();
}

Formun herhangi bir CSRF belirteci içermediğini, bu nedenle girdi parametreleri olarak paylaşılan hassas bilgilerin çeşitli saldırılara açık olduğunu gözlemleyin.

CSRF jetonlu form

Aşağıdaki kod satırları, CSRF belirteçleri kullanılarak yeniden tasarlanan formu gösterir -

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

Elde edilen çıktı, aşağıda verildiği gibi bir jetonla JSON döndürür -

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "TutorialsPoint",
   "email": "[email protected]"
}

Bu, gönder düğmesine tıklanarak oluşturulan CSRF belirtecidir.