CSRF, bir kullanıcının kimliği doğrulandıktan sonra yetkisiz işlemler gerçekleştirmek için kullanıcının tarayıcısını kötü niyetli bir şekilde kullanma saldırı türüdür. Bu tür saldırılara karşı korunma önlemleri almak, web uygulamalarının güvenliği açısından önemlidir. PHP 7.4 ile bu tür saldırılara karşı etkili bir şekilde savunma yapmak mümkündür.
CSRF Nedir?
Cross-Site Request Forgery, bir kullanıcının tarayıcıda yetkili olduğu bir oturum açtıktan sonra, istem dışı olarak istekler göndermesine neden olan bir saldırı türüdür. Saldırgan, kurbanın tarayıcısına kötü niyetli bir web sayfası aracılığıyla istek gönderebilir. Kullanıcının tarayıcısı, kurbanın oturum bilgilerini taşıdığından, bu istekler sunucu tarafında kullanıcı tarafından yapılmış gibi görünür.
CSRF Koruma Yöntemleri
CSRF’ye karşı koruma için çeşitli yöntemler bulunmaktadır. Bu yöntemler genelde token tabanlı sistemler üzerine inşa edilmiştir.
Token Oluşturma
CSRF saldırılarına karşı en yaygın ve etkili yöntem, her form için benzersiz bir iletişim belirteci (token) oluşturmaktır. PHP’de bu işlem, session tabanlı bir sistem ile birlikte gerçekleştirilebilir. Öncelikle, her oturum açıldığında bir token oluşturulmalı ve bu token sayfada form olarak kullanıcıya sunulmalıdır.
“`php
session_start();
if (empty($_SESSION[‘csrf_token’])) {
$_SESSION[‘csrf_token’] = bin2hex(random_bytes(32));
}
$csrf_token = $_SESSION[‘csrf_token’];
“`
Form İçerisinde Token Kullanımı
Oluşturulan token, form içerisinde gizli bir alan olarak eklenmelidir. Bu alan, istek gönderilmeden önce kullanıcı tarafından doldurulacak ve sunucuya gönderilecektir.
“`html
“`
Sunucu Tarafında Token Doğrulama
Form gönderildiğinde, sunucu tarafında gönderilen token ile oturumda saklanan token karşılaştırılmalıdır. Bu işlem, isteklerin doğruluğunu kontrol eder. Eğer token’lar eşleşmezse, istek reddedilmelidir.
“`php
session_start();
if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’) {
if (hash_equals($_SESSION[‘csrf_token’], $_POST[‘csrf_token’])) {
// İstek geçerlidir, işleme devam edilir.
} else {
// CSRF koruması başarısız, istek reddedilir.
die(“CSRF token validation failed.”);
}
}
“`
Çerezlerde CSRF Koruması
Bir diğer yöntem, çerezlerde bir CSRF koruma mekanizması oluşturmaktır. Bu yöntem, her istek üzerinde ekstra bir kontrol yapmak için kullanılabilir. CSRF token’ı, hem form verilerine hem de çerezlere eklenebilir. Sunucu, her iki değer arasında doğrulama yaparak isletimlerin güvenliğini artırabilir.
CORS ile Yanıt Kontrolü
Cross-Origin Resource Sharing (CORS), farklı kökenlere sahip isteklere izin verme mekanizmasıdır. CORS ayarları, web uygulamasının yalnızca belirli alan adlarına istek kabul etmesi için yapılandırılabilir. Bu şekilde, sunucu, isteklerin hangi kökenlerden geldiğini kontrol edebilir ve yalnızca güvenilen alan adlarından gelen isteklere izin verebilir.
HTTP Başlıkları ile Koruma
CSRF koruma için kullanılabilecek bir diğer yöntem, istekleri kontrol etmek amacıyla özel HTTP başlıkları kullanmaktır. Bu başlıklar, yalnızca geçerli sayfalardan gelen isteklere izin vermek için yapılandırılabilir. Örneğin, ‘X-Requested-With: XMLHttpRequest’ başlığı, yalnızca AJAX istekleri için tanınabilir ve bu durumda CSRF koruması sağlanabilir.
Sonuç
PHP 7.4 ile CSRF saldırılarına karşı korunma, web uygulamalarının güvenliğini artırmak için kritik bir adımdır. Token tabanlı sistemler, çerez kontrolleri, CORS ayarları ve özel HTTP başlıkları gibi yöntemler, bu saldırılara karşı etkin bir savunma sağlar. Her geliştiricinin uygulamalarında bu önlemleri dikkate alması ve uygulama içindeki güvenlik seviyesini artırması önemlidir. CSRF koruma stratejileri, kullanıcıların veri güvenliğini sağlamada önemli bir rol oynamaktadır.