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

