 
  
  Veritabanı güvenliği, bir web uygulamasının en kritik bileşenlerinden biridir. PHP ile veritabanı güvenliği sağlamak için SQL Injection önleme, parola güvenliği, erişim kontrolleri ve CSRF koruması gibi yöntemler uygulamalısınız.
Veritabanı güvenliğini sağlamak için aşağıdaki örneklendirdiğim yöntemleri kullanabilirsiniz.
        
Bu kullanım güvenli değildir çünkü doğrudan kullanıcı girişine dayanmaktadır. Eğer saldırgan şu tür bir giriş yaparsa:
      
        
Tüm kullanıcı verileri görüntülenebilir.
        
Bu yöntem, SQL Injection saldırılarını önler.
        
        
Bu, zararlı HTML ve JavaScript girişlerini engeller.
        
        
        
        
        
Önemli: 
        
        
        
        
        
Yedekleri şifreleyerek saklayın:
      
        
        
 
  
  
  
1. SQL Injection Önleme
SQL Injection saldırıları, kötü niyetli kullanıcıların SQL sorgularını manipüle ederek veritabanına yetkisiz erişim sağlamasına yol açabilir. Hazırlıklı (Prepared) SQL ifadeleri kullanarak bu saldırıları önleyebiliriz.1.1 Hatalı Kullanım (Tehlikeli!)
          PHP
          
        
        $user_id = $_GET['id'];
$query = 'SELECT * FROM users WHERE id = $user_id';
$result = $db->query($query);
          GENEL
          
        
        ?id=1 OR 1=1 --
1.2 Güvenli Kullanım (PDO ile Prepared Statements)
          PHP
          
        
        $user_id = $_GET['id'];
$query = 'SELECT * FROM users WHERE id = :id';
$stmt = $db->prepare($query);
$stmt->bindParam(':id', $user_id, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
2. Kullanıcı Girdilerini Doğrulama ve Filtreleme
Kullanıcılardan gelen verileri filtrelemek, kötü niyetli girişleri önlemek için gereklidir.2.1 E-posta Adresi Doğrulama
          PHP
          
        
        $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if (!$email) {
    die('Geçersiz e-posta adresi!');
}
2.2 XSS (Cross-Site Scripting) Önleme
          PHP
          
        
        $safe_input = htmlspecialchars($_POST['input'], ENT_QUOTES, 'UTF-8');
3. Parola Güvenliği ve Hashleme
Parolaları asla düz metin olarak saklamayın! bcrypt veya argon2 gibi güçlü şifreleme algoritmaları kullanın.3.1 Parola Hashleme
          PHP
          
        
        $hashed_password = password_hash($password, PASSWORD_DEFAULT);
3.2 Parola Doğrulama
          PHP
          
        
        if (password_verify($password, $hashed_password)) {
    echo 'Giriş başarılı';
} else {
    echo 'Hatalı parola';
}
4. Yetkilendirme ve Erişim Kontrolleri
Kullanıcıların yetkilendirilmiş sayfalara erişmesini sağlamak için oturum kontrolleri yapmalıyız.4.1 Oturum Kontrolü
          PHP
          
        
        session_start();
if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}
4.2 RBAC (Role-Based Access Control) Kullanımı
          PHP
          
        
        if ($_SESSION['role'] !== 'admin') {
    die('Erişim izniniz yok!');
}
5. Güvenli Veritabanı Bağlantısı
Veritabanı bağlantısının güvenli olması kritik önem taşır.
          PHP
          
        
        try {
    $db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'root', '', [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
} catch (PDOException $e) {
    error_log($e->getMessage());
    die('Veritabanı bağlantı hatası!');
}
error_log($e->getMessage()) ile hataları log dosyasına yazdırın, ekrana basmayın!
6. Veritabanı İzinlerini Kısıtlama
Veritabanı kullanıcılarına minimum yetki vererek güvenliği artırabilirsiniz.
          SQL
          
        
        CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT SELECT, INSERT, UPDATE ON testdb.* TO 'appuser'@'localhost';
7. CSRF (Cross-Site Request Forgery) Koruması
CSRF saldırılarını önlemek için her form işleminde CSRF token kullanın.7.1 CSRF Token Oluşturma
          PHP
          
        
        session_start();
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
7.2 Form Kullanımı
          HTML
          
        
        <form method='POST'>
    <input type='hidden' name='csrf_token' value='<?php echo $_SESSION['csrf_token']; ?>'>
    <button type='submit'>Gönder</button>
</form>
7.3 Token Doğrulama
          PHP
          
        
        if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die('Geçersiz CSRF token!');
}
8. Veritabanı Yedekleme ve İzleme
Düzenli olarak veritabanı yedeği alarak olası veri kayıplarını önleyin.
          SH
          
        
        mysqldump -u root -p testdb > backup.sql
          SH
          
        
        gzip -c backup.sql | openssl enc -aes-256-cbc -e -out backup.sql.gz
9. HTTPS Kullanımı
Hassas verilerin iletimi sırasında HTTPS kullanmak zorunludur. Sunucunuza SSL sertifikası yükleyerek tüm verilerin şifreli iletilmesini sağlayın.
          APACHE
          
        
        <VirtualHost *:80>
    Redirect permanent / https://yourdomain.com/
</VirtualHost>Benzer Yazılar
Yorumlar ()
Henüz yorum yok. İlk yorum yapan sen ol!
 
         
         
         
         
     
     
     
    