CSRF açığından korunmak

Cross Site Request Forgering açığı yani karşı siteden sahte istek anlamına gelen csrf açığından nasıl korunuruz ona değineceğim.

Basit bir örnek ile delete.php dosyanız var ve adı üstünde silme işlemini gerçekleştiriyor. Get olarak username değişkenini aldığını varsayalım. Saldırgan kişi kendi sitesine

kodunu eklediğinde ve siz de hedef sitede oturum açıp aynı anda nette gezerken saldırganın kodunun olduğu bir sitede dolaştığınızda otomatik olarak bu adrese istek gidecek ve üyeliğiniz silinecektir.

Bir başka şekli ise size gelen spam maillerden bu gibi linklere farketmeden tıklarsanız aynısı başınıza gelebilir.

Tabi buradaki örneği anlaşılabilirlik açısından basit olduğu için verdim.

GET metodundan örnek verdim ama aynı açık POST metodu için de geçerlidir.

 

Peki nasıl bir önlem alabiliriz?

Bunun için en basit yollardan birisi olan session kullanımıdır. Bunun için öncelikle böyle önemli bir işlem için get metodu yerine post kullanınız geti genellikle sorgulama, gösterme amaçlı kullanmanız faydalı olacaktır.

Öncelikle rastgele bir token değişkeni oluşturuyoruz ve bunu sessiona atıyoruz.

Daha sonra bu tokenımızı forma hidden input olarak ekliyoruz.

Formu submit ettikten sonra da karşı tarafta bunun kontrolünü yapıyoruz ve başarılı ise tokenı boşaltıyoruz.

Bu şekilde başka bir yerden bir istek gelse bile tokenlar uyuşmadığı için işlem gerçekleştirilemeyecek.

Alternatif olarak Google amcanın reCapthca‘sını da kullanabilirsiniz.