CSRF Nedir?
CSRF, web uygulamalarında kullanıcıyı, bilmeden ve istemeden zararlı bir isteği gönderme durumuna sokan bir saldırı türüdür. Bu saldırı, kullanıcının oturum açmış olduğu bir web sitesi üzerinden yapılır. Yani, bir saldırgan, kurbanın tarayıcısına zararlı bir istek gönderir ve bu istek, kurbanın kimliğiyle sahte bir işlem yapılmasına neden olabilir. Kısacası, CSRF bir tür "yönlendirilmiş" saldırıdır.
Örneğin, bir kullanıcının bankacılık sitesine giriş yaptığını varsayalım. Banka hesabında işlem yapmaya yetkili olan bu kullanıcı, başka bir zararlı siteyi ziyaret eder. Bu zararlı site, banka hesabına para transferi yapmak için bir istek gönderir. Bu istek, kurbanın hesabına zarar verebilir çünkü kurban, bankacılık sitesinde zaten giriş yapmış durumdadır ve CSRF, kurbanın bilgisi dışında bu işlemi gerçekleştirir.
CSRF'nin Etkileri Nedir?
CSRF saldırıları ciddi sonuçlar doğurabilir. Bir hacker, kullanıcıyı kandırarak:
1. Hesap bilgilerini değiştirebilir.
2. Para transferi yapabilir.
3. Yeni bir şifre oluşturabilir ve hesabı ele geçirebilir.
4. Özel bilgileri sızdırabilir.
Kısacası, saldırganın elinde kullanıcının kimliğiyle yapılabilecek neredeyse her şey vardır. Bu da web güvenliği için büyük bir tehdit oluşturur.
CSRF'den Nasıl Korunuruz?
Peki, web uygulamanızda CSRF saldırılarına karşı nasıl korunabilirsiniz? İşte bazı öneriler:
1. Token Tabanlı Koruma Kullanın
Her kullanıcı oturumu için benzersiz bir güvenlik token’i oluşturun. Bu token, her form isteğiyle birlikte gönderilir ve sunucu, gelen isteği doğrularken bu token’i kontrol eder. Eğer token eşleşmezse, istek reddedilir.
2. Referer ve Origin Başlıklarını Kontrol Edin
CSRF saldırılarına karşı ikinci bir önlem, HTTP başlıklarında gelen referer ve origin bilgilerini kontrol etmektir. Bu başlıklar, isteğin hangi kaynaktan geldiğini belirtir. Yabancı kaynaklardan gelen istekleri engelleyerek, CSRF riskini azaltabilirsiniz.
3. SameSite Cookie Özelliğini Kullanın
SameSite, çerezlerin yalnızca belirli koşullar altında gönderilmesini sağlayan bir özelliktir. Bu özellik, CSRF saldırılarına karşı ek bir koruma katmanı sağlar. “Strict” veya “Lax” ayarlarını kullanarak, yalnızca geçerli site üzerinden gelen isteklerin işlenmesini sağlarsınız.
4. GET ve POST İsteklerini Doğru Kullanın
GET istekleri, veri alımını amaçlar ve genellikle zararsızdır. Ancak POST istekleri, veri göndermeyi amaçlar ve kritik işlemler için kullanılır. GET istekleriyle herhangi bir önemli işlem yapmamalısınız.
CSRF'yi Önlemek İçin Basit Bir Kod Örneği
İşte bir CSRF koruması için basit bir Python kodu örneği:
import secrets
from flask import Flask, request, render_template_string
app = Flask(__name__)
app.secret_key = secrets.token_hex(16)
@app.route('/')
def home():
token = secrets.token_hex(16)
return render_template_string('', token=token)
@app.route('/transfer', methods=['POST'])
def transfer():
csrf_token = request.form.get('csrf_token')
if csrf_token != session.get('csrf_token'):
return "CSRF token mismatch!", 400
# Para transfer işlemi burada gerçekleşir
return "İşlem başarılı!", 200
if __name__ == '__main__':
app.run()
Bu kod, her formun içinde benzersiz bir CSRF token’ı göndererek, saldırıların önlenmesine yardımcı olur. Bu token, form ile birlikte gönderilir ve sunucu, token’ı kontrol eder. Eğer token eşleşmezse, işlem engellenir.
Sonuç: Güvenliği İhmal Etme
Web güvenliği, günümüzde her zamankinden daha önemli bir konu haline gelmiştir. CSRF gibi saldırılara karşı dikkatli olmak, hem kullanıcıları korur hem de uygulamanızın itibarını artırır. Unutmayın, güvenlik önlemleri almak, sadece kötü niyetli saldırıları engellemekle kalmaz, aynı zamanda kullanıcılarınızın güvenliğini ve rahatlığını da sağlar.