Buyukweb
Veritabanı Güvenliği: SQL Injection Önleme ve Erişim Kontrolü

Veritabanı Güvenliği: SQL Injection Önleme ve Erişim Kontrolü

Veritabanı güvenliği: SQL injection saldırıları ve önleme, en az yetki prensibi, veritabanı şifreleme ve güvenlik denetimi.

Büyükweb Teknik Ekibi18 Nisan 20257 dakika okuma

Veritabanı Güvenliği: SQL Injection Önleme ve Erişim Kontrolü

Veritabanı, bir uygulamanın en kritik bileşenidir. Veri ihlali hem yasal hem de itibar açısından yıkıcı sonuçlar doğurabilir.

SQL Injection: En Yaygın Veritabanı Saldırısı

SQL injection, kullanıcı girdisinin doğrudan SQL sorgusuna eklenmesiyle gerçekleşir:

Saldırı Senaryosu:

-- Güvensiz PHP kodu:
$query = "SELECT * FROM kullanicilar WHERE username = '" . $_GET['username'] . "'";

-- Normal giriş:
SELECT * FROM kullanicilar WHERE username = 'ahmet'

-- Saldırı girişi: ' OR '1'='1
SELECT * FROM kullanicilar WHERE username = '' OR '1'='1'
-- Tüm kullanıcıları döndürür!

-- Daha tehlikeli:
-- ' UNION SELECT null, version(), null--
-- ' ; DROP TABLE kullanicilar; --

Korunma: Prepared Statements

// PHP PDO
$stmt = $pdo->prepare("SELECT * FROM kullanicilar WHERE username = ? AND sifre = ?");
$stmt->execute([$username, $sifre_hash]);
$user = $stmt->fetch();

// MySQLi
$stmt = $conn->prepare("SELECT * FROM kullanicilar WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
# Python
cursor.execute("SELECT * FROM kullanicilar WHERE username = %s AND sifre = %s",
               (username, sifre_hash))
// Node.js mysql2
const [rows] = await connection.execute(
    'SELECT * FROM kullanicilar WHERE username = ? AND sifre = ?',
    [username, sifreHash]
);

ORM Kullanımı (Güvenli):

# Django ORM - SQL injection güvenli
kullanici = User.objects.filter(username=username, is_active=True).first()

# SQLAlchemy
result = db.execute(select(User).where(User.username == username))

En Az Yetki Prensibi

Her uygulama/kullanıcı yalnızca ihtiyaç duyduğu yetkiye sahip olmalıdır:

-- Web uygulaması için kısıtlı kullanıcı
CREATE USER 'web_app'@'localhost' IDENTIFIED BY 'guclu_sifre';

-- Sadece gerekli tablolar, gerekli işlemler
GRANT SELECT, INSERT, UPDATE ON sitem_db.yazilar TO 'web_app'@'localhost';
GRANT SELECT, INSERT ON sitem_db.yorumlar TO 'web_app'@'localhost';
GRANT SELECT ON sitem_db.kategoriler TO 'web_app'@'localhost';

-- Tehlikeli işlemlere (DROP, TRUNCATE, CREATE) kesinlikle yetki verme
-- Sadece DBA yetkisi vermek için ayrı kullanıcı:
CREATE USER 'dba_user'@'192.168.1.0/24' IDENTIFIED BY 'dba_sifresi';
GRANT ALL ON sitem_db.* TO 'dba_user'@'192.168.1.0/24';

FLUSH PRIVILEGES;

Ağ Güvenliği

# my.cnf - MySQL
[mysqld]
# Sadece lokal bağlantı
bind-address = 127.0.0.1

# Uzaktan root girişi kapat
# (mysql_secure_installation ile zaten kapatılmış olmalı)
# pg_hba.conf - PostgreSQL
# Sadece güvenilir IP'lerden bağlantı
host    sitem_db    web_app    127.0.0.1/32    md5
host    sitem_db    web_app    10.0.0.0/8      md5

Hassas Verilerin Şifrelenmesi

-- MySQL AES şifreleme
INSERT INTO kart_bilgileri (kullanici_id, kart_numarasi)
VALUES (42, AES_ENCRYPT('1234567890123456', 'gizli_anahtar'));

SELECT AES_DECRYPT(kart_numarasi, 'gizli_anahtar') AS kart
FROM kart_bilgileri WHERE kullanici_id = 42;

-- Daha iyi: Uygulama katmanında şifrele, şifreli hali veritabanına kaydet
# Python - cryptography kütüphanesi
from cryptography.fernet import Fernet

key = Fernet.generate_key()
cipher = Fernet(key)

# Şifrele
encrypted = cipher.encrypt(b"kredi-karti-1234")

# Çöz
decrypted = cipher.decrypt(encrypted)

Parola Hash'leme

-- MySQL'de asla düz metin şifre saklamayın!
-- Kötü:
INSERT INTO kullanicilar (sifre) VALUES ('123456');

-- İyi (uygulama katmanında hash'leyin):
INSERT INTO kullanicilar (sifre) VALUES ('$2y$12$hashhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh');
-- bcrypt, argon2id kullanın

Veritabanı Audit Logging

-- MySQL General Log (dikkatli - performans etkisi)
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/general.log';

-- MySQL Enterprise Audit (commercial) veya MariaDB Audit Plugin
INSTALL PLUGIN server_audit SONAME 'server_audit.so';
SET GLOBAL server_audit_logging = ON;
SET GLOBAL server_audit_events = 'CONNECT,QUERY';

-- PostgreSQL pgaudit
CREATE EXTENSION pgaudit;

Güvenlik Denetim Kontrol Listesi

[ ] Prepared statement kullanılıyor (SQL injection önlemi)
[ ] Her uygulama kendi kısıtlı DB kullanıcısına sahip
[ ] Root/admin şifresi güçlü
[ ] Uzaktan root girişi kapalı
[ ] Veritabanı sadece lokal dinliyor
[ ] Hassas veriler şifreli saklanıyor
[ ] Şifreler bcrypt/argon2 ile hash'leniyor
[ ] Düzenli güvenlik denetimi yapılıyor
[ ] Audit logging etkin
[ ] Yedekler şifreli
[ ] SSL bağlantı zorunda (uzak erişimde)

MySQL SSL Bağlantısı

# SSL sertifikası oluştur
mysql_ssl_rsa_setup --uid=mysql

# my.cnf
[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem
require_secure_transport = ON  # SSL zorunlu kıl
-- Kullanıcıya SSL zorunlu kıl
ALTER USER 'web_app'@'%' REQUIRE SSL;

Büyükweb hosting ve VDS çözümlerimiz, veritabanı güvenliği için ModSecurity, Imunify360 ve izole hosting ortamı ile desteklenmektedir.


Veritabani Performans Optimizasyonu

Veritabani web uygulamalarinin kalbidir.

MySQL/MariaDB Tuning

innodb_buffer_pool_size'i RAM'in %60-70'ine ayarlayin. slow_query_log ile yavas sorgulari tespit edin. max_connections optimize edin.

Indeksleme

WHERE, JOIN, ORDER BY sutunlarina indeks ekleyin. EXPLAIN ile sorgu planlari analiz edin. Composite index kullanin.

Baglanti Havuzu

ProxySQL ile gelismis baglanti yonetimi. Connection pooling ile maliyet azaltma. Persistent connections kullanin.

Replikasyon

Master-Slave ile okuma yukunu dagitin. Galera Cluster ile multi-master yuksek erisilebilirlik. Semi-senkron replikasyon degerlendirin.

Yedekleme

mysqldump mantiksal, xtrabackup fiziksel yedek. Binary log ile point-in-time recovery. Incremental yedekleme ile tasarruf.

Sik Sorulan Sorular

MySQL mi PostgreSQL mi?

MySQL cogu web uygulamasi ile uyumlu. PostgreSQL gelismis veri tipleri ve JSON icin ideal. CMS'ler genelde MySQL kullanir.

Veritabanim buyudu ne yapmaliyim?

Gereksiz verileri temizleyin, tablo optimize edin, arsivleme yapin, partitioning kullanin.

Ne siklikla yedek almaliyim?

Kritik veritabanlari saatlik, standart siteler gunluk. Buyuk degisikliklerden once manuel yedek.

Sonuc

Veritabani optimizasyonu uygulama performansini dogrudan etkiler. Indeksleme, tuning ve yedekleme ile veri katmaninizi guclendirin.

Veritabani Boyut Yonetimi

Buyuk Tablolar icin Stratejiler

  • Partitioning: Tarihe gore tablolari bolumlendirin. Sorgu performansi artar.
  • Arsivleme: Eski verileri arsiv tablolarina tasiyin.
  • Sikistirma: InnoDB sikistirmasi ile disk kullanimini %50-75 azaltin.

WordPress Veritabani Optimizasyonu

  • wp_options autoload: Gereksiz autoload kayitlari temizleyin.
  • Post revisions: wp-config.php'de WP_POST_REVISIONS sinirlayin.
  • Transient veriler: Suresi dolmus verileri duzenli temizleyin.
  • Spam yorumlar: Toplu silin.

Veritabani Guvenlik

  • Varsayilan portu degistirin
  • Uygulama bazli kullanici olusturun
  • Minimum gerekli yetki verin
  • SSL ile baglanti sifreleyin
  • Duzenli guvenlik taramasi yapin

Profesyonel Hosting icin Onemli Kriterler

Veri Merkezi Kalitesi

Veri merkezinin tier seviyesi, sunucu barindirma kalitesini dogrudan etkiler. Tier 3 veri merkezleri yedekli guc, soğutma ve ag altyapisi ile %99.982 uptime garantisi sunar. Buyukweb'in Bursa Pendc Tier 3 veri merkezi bu standartlari karsilamaktadir.

Teknik Destek Kalitesi

7/24 ulasılabilir, Turkce ve teknik bilgi sahibi destek ekibi hosting hizmetinin vazgecilmez parcasidir. E-posta, canli destek ve telefon kanallarindan hizli yanit almak ozellikle is surekliligi acisından kritiktir.

Olceklenebilirlik

Isletmeniz buyudukce hosting ihtiyaclariniz da degisir. Paylasimli hostingten VDS'e, VDS'den dedicated sunucuya sorunsuz gecis yapabilmek uzun vadeli planlamaniz icin onemlidir. Buyukweb tum bu gecis sureclerini ucretsiz olarak yonetir.

Yedekleme ve Felaket Kurtarma

Gunluk otomatik yedekleme, tek tikla geri yukleme ve uzak yedekleme secenekleri veri guvenliginiz icin sart. JetBackup ile profesyonel yedekleme cozumu tum Buyukweb hosting paketlerinde standarttir.

Guvenlik Katmanlari

SSL sertifikasi, WAF korumasi, malware tarama, DDoS korumasi ve guvenlik duvari - tum bu katmanlar birlikte calisiarak web sitenizi korur. Buyukweb bu guvenliklerin hepsini standart olarak sunar.

Uygulama ve Proje Ornekleri

Hosting ve sunucu hizmetleri farkli sektorlerde farkli ihtiyaclara karsilik gelir:

Kurumsal Web Sitesi

Sirket tanitim sitesi, blog, kariyer sayfasi ve iletisim formu icin paylasimli hosting yeterlidir. SSL, e-posta ve yedekleme dahil. cPanel ile kolay yonetim.

E-Ticaret Magaza

WooCommerce veya PrestaShop ile online magaza kurmak icin VDS oneriyoruz. Urun gorselleri, siparis yonetimi ve odeme entegrasyonu icin daha fazla kaynak gerekir.

SaaS Uygulamasi

Kendi yaziliminizi barindirmak icin dedicated sunucu veya VDS idealdir. Tam root erisim, ozel yapilandirma ve yuksek performans gerektirir.

Oyun Sunucusu

Multiplayer oyunlar icin dusuk gecikme suresi ve yuksek CPU performansi sart. GPU VDS ile grafik islem gerektiren oyun sunuculari calistirabilirsiniz.

Gelistirme Ortami

Test, staging ve CI/CD icin uygun fiyatli VDS paketleri kullanin. Docker ile gelistirme ortamlarinizi standartlastirin.

Her senaryo icin en uygun cozumu belirlemek icin Buyukweb teknik ekibine danisin: 0850 302 60 70.

Etiketler:

#veritabanı#database#veri yönetimi

Bu yazıyı paylaş