Merhaba! Ben Aykhan, 1999 doğumlu bir Azerbaycanlıyım ve 2017 yılından bu yana programlamayla ilgileniyorum. Teknolojinin büyülü dünyası beni her zaman etkilemiştir ve bu merakımı kendi blogumda paylaşarak daha geniş bir kitleyle buluşturmayı amaçlıyorum.
Herkese merhaba arkadaşlar bu gün sizlere Laravelin 419 hatası hakkında bilgi vermek istiyorum. Bilindiği gibi normal PHP ile kod yazarken bir çok güvenlilik önemlerini kendimiz alması gerekiyordu. Yanlız Laravel sonrasında arkadaşlar bunu bizim yerimize yapmış ve güvenlilik önemlerini almışlar. Bu zaman form içerisinde kullanılan tek kod @csrf oldu. Peki @csrf
nedir? ne iş yapar?
Hackerlerin SQL
'e sızma işlemleri bilindiği gibi post ve get sorğularıyla yapılıyor ve bu zaman güvenlilik önlemleri alınmamışsa eğer gönderilen her post ve ya get sorğuları SQL
'e iletiliyordu. SQL
'de soruya göre bir cevap veriyordu tabii ki de. Örneğin insert update ve ya her hangi bir işlem ola bilirdi. Güvenlilik işlemleri şu şekilde yapıla biliyorduki, mesala bir form post işleminde insert ve ya update işlemi yapılacaksa eğer, her hangi bir inputa javascriptscript kodları yazılıyodu. Bizde php'de bu sorğudan gelen değeri hazır php funksiyonu olan strip_tags()
isimli bir funksiyondan geçirib insert ediyorduk ki, bu fonksiyonda ismindende anlaşıldığı gibi tagları silerek yanlızca yazıyı SQL'e insert ediyodu. Laravelin @csrf
mantığı ise sorğu zamanı iletilen kodu string'e çevirerek SQL'e insert ediyo ve laravel sintaksisiyle yani {!! !!}
yazılmadığı sürec o kod sadece string olarak görülüyor olacakdı. Yani biz sadece o kodu kendimiz bir yerlerde yaza bilir ve istedigimiz yerde çalıştırmamaızı sağlaya biliriz, başka birisi her hangi bir kod yazarsa bile, mesala birisi kullanici adini
<script>
alert('Mesaj');
</script>
Yukardakı gibi yazdığını düşünürsek, o kullanıcının bide ana sayfada gösterildiğini düşünürsek her defa karşımıza alert mesajı çıkardı. Ancak laravel sayesinde bu kod sadece string olarak görüldüğü için biz istemediğimiz süreç çalışmayacaktır.
419 Hatası nedir?
Form işlemi yaptığınız zaman eğer @csrf
yazmayı unutduysanız bu hata ile karşılaşa bilirsiniz. Yapmanız gereken sadece
<form>
@csrf
.......
</form>
Yukarda gösterildiği gibi form
Tagları arasına @csrf
kodunu atmak olacaktır.
Eğer bu kod olduğu halde yinede hata alıyorsanız başka bir yöntemi uyğulaya bilirsiniz. Bilindiği gibi laravelin açtığı kullanıcı session
nerdeyse 120 dakika sonra kapaniyor. Eğer bir kullanıcı adıyla giriş yapıp form başında hiç bir şey yapmadan kalırsanız sonra yeniden sayfa yenilemeden form işlemi yapmaya çalışırsanız bu hatayla karşılaşmanız mümkün. Bunun için yapmanız gereken tek şey sayfayı yenileyip yeniden giriş yaparak form işlemini yapmanızdır.