30 Nisan 2025 - 10:55
PHP ile Veritabanı Güvenliği Görseli
PHP

PHP ile Veritabanı Güvenliği

Yorumlar
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.

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);
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:
GENEL
?id=1 OR 1=1 --
Tüm kullanıcı verileri görüntülenebilir.

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);
Bu yöntem, SQL Injection saldırılarını önler.

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');
Bu, zararlı HTML ve JavaScript girişlerini engeller.

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ı!');
}
Önemli: 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
Yedekleri şifreleyerek saklayın:
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!

Yorum Yap