Hoşgeldin Misafir

Web yazılımların kodlanması zamanı yapılan güvenlik önemleri (Anti-injection, Anti-XSS, CSRF, Upload)

ZeroPulse

Bishkek
1 Ara 2018
1,139 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Merhaba değerli forum okuyucuları ben @ZeroPulse.
Bu yazıda, web yazılımlarının geliştirilmesi sırasında dikkat edilmesi gereken temel güvenlik önlemlerinden bahsedeceğim. Anti-injection, Anti-XSS, CSRF korumaları ve dosya yüklenme güvenliği gibi önemli konuları ele alacağız. Umarım bu bilgiler işinize yarar!


1. Anti-Injection (SQL Injection Koruması)

SQL Injection, zararlı kodlarla veritabanınızı manipüle etmeyi hedefleyen bir saldırı türüdür. Peki, bu tehditten nasıl korunabiliriz?

  • Hazır sorgular (Prepared Statements): Veritabanı sorgularınızı hazır ifadelerle oluşturun. Bu yöntem, gönderilen parametrelerin doğruluğunu garanti eder.
  • ORM Kullanın: Laravel'in Eloquent'i veya Hibernate gibi bir ORM aracı, veritabanı sorgularını otomatik olarak güvende tutar.
  • Girdi Doğrulama: Kullanıcıdan gelen her veriyi kontrol edin. Sayılı veriler için is_numeric, metinler için regex kullanabilirsiniz.

    Bir giriş formunda kullanıcıdan alınan veriyi aşağıdaki şekilde sorguya ekleyebilirsiniz:
    PHP:
    $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
    $stmt->execute([$_POST['email']]);
hihc5xj.jpg



2. Anti-XSS (Cross-Site Scripting Koruması)

XSS saldırıları, kullanıcı tarayıcısına zararlı script kodları yerleştirmeyi amaçlar. Peki, bu riskten nasıl kurtuluruz?

  • HTML önizlemesi için sanitize işlemi: Kullanıcıdan gelen verileri HTML önizleme yapmadan önce temizleyin. PHP için htmlspecialchars() veya özel kütüphaneler işe yararlı olabilir.
  • Content Security Policy (CSP): Tarayıcınıza sadece belli kaynaklardan kod çalıştırmasını söyleyin. Bu, zararlı scriptlerin çalışmasını engeller.
  • DOM Manipülasyonunu Sınırlandırın: Kullanıcı verilerini direkt DOM'a eklemek yerine, özel önlemler alın.
    Bir yorum sistemi için kullanıcı girdisini temizleyebilirsiniz:
    PHP:
    $comment = htmlspecialchars($_POST['comment'], ENT_QUOTES, 'UTF-8');
    echo $comment;

at04cvc.png



3. CSRF Koruması (Cross-Site Request Forgery)

CSRF, kullanıcının tarayıcısından habersiz şekilde çağrılan yetkisiz işlemleri kapsar. Bu tehditi azaltmak için:

  • CSRF Token: Her form isteğinde benzersiz bir token kullanın. Laravel ve Django gibi çatılar bu konuda yerleşik destek sağlar.
  • Referer Kontrolü: Sunucu, isteğin geldiği URL'yi kontrol ederek, güvenilir kaynaklardan geldiğinden emin olabilir.
  • Kullanıcı Oturumlarını Bağlama: Oturum bilgilerinin IP veya tarayıcı bilgileriyle eşleşmesini zorunlu kılın.

    PHP'de bir CSRF token ekleyebilirsiniz:

    PHP:
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));

    Formda kullanımı:

    HTML:
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
cgm9sox.png



4. Dosya Yüklenme Güvenliği

Dosya yüklenmesi, potansiyel olarak sisteminize zararlı kodlar bulaştırabilir. Güvenli bir dosya yükleme için:

  • Dosya Türü Kontrolü: Yüklenilen dosyanın MIME türünü kontrol edin. Sadece izin verdiğiniz dosya türlerine izin verin.
  • Dosya İsmi Değiştirme: Dosya isimlerini rastgele UUID veya hash değerleriyle değiştirin. Bu, dosya yüklenirken çakışmaları önler.
  • Yüklenme Dizini Kontrolü: Dosyaları sadece public olmayan, izole dizinlerde saklayın.

    Bir dosya yükleme işleminde güvenlik önlemleri alabilirsiniz:
    PHP:
    $allowed_types = ['image/jpeg', 'image/png'];
    if (in_array($_FILES['file']['type'], $allowed_types)) {
        move_uploaded_file($_FILES['file']['tmp_name'], '/uploads/' . uniqid() . '.jpg');
    } else {
        echo "Dosya türü desteklenmiyor.";
    }

eiayz5y.png





Bu yazıda, web yazılımları geliştirirken güvenliğinizi nasıl artırabileceğinizi özetledim.
Umarım faydalı olmuştur. Konuyla ilgili sorularınızı ya da deneyimlerinizi yorumlarda paylaşabilirsiniz!

Keyifli kodlamalar!




LOJİSTİK & GREEN TİM SUNDU

btn1pyf.png
D4tyNI.png