
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

PHP ile Çok Katmanlı MVC Mimari Kullanımı
0 Yorumlar
Yorumlar ()
Henüz yorum yok. İlk yorum yapan sen ol!