Konuyu Açan
#1
Birçok proje aşamasında dış veri kaynaklarından verileri içe aktarırken, PHP tarafında import işlemlerinin güvenliğini göz ardı etmek gibi basit hatalar, SQL enjeksiyonu riskini önemli ölçüde artırabiliyor. Aşağıda dikkat edilmesi gereken kilit noktaları ve uygulanabilir pratikler var.
Güvenlik ilkesi
Import akışı için pratik adımlar
Kaynağı güvenilirliği doğrulayın: CSV/JSON vs. gelen dosyanın imzalanması veya doğrulanması, beklenen alan sayısı ve tipinin kontrolü.
Veri temizliği: Gereksiz sütunlar atılmalı, zorunlu alanlar var mı diye bakılmalı; tehlikeli karakterler veya aşırı uzun değerler sınırlandırılmalı.
Hazır ifadeler kullanın: PDO ile prepared statements ve bound parameters kullanımı yaygın çözümdür. Örnek akış şöyle:
Transaksiyon kullanımı: Import işlemleri bir bütün olarak ele alınmalı; başarısızlık durumunda geri alınabilir (ROLLBACK). Bu, tutarsızlıkları engeller.
Dosya içeriğiyle sınırlı işlem: Veriyi bellek içi kontroller sonrası DB’ye yazma. Büyük dosyalarda parçalı işler ve zaman aşımı yönetimi düşünülmeli.
Yetkilendirme ve logging: İçerik içe aktarma işlemi sadece yetkili kullanıcılar tarafından yapılmalı; tüm işlemler loglanmalı ve anomali tespitleri için hatalı satırlar işaretlenmelidir.
Tipik riskler
Sizin projede hangi veri formatlarıyla import yapıyorsunuz, ve enjeksiyon riskini minimize etmek için hangi stratejileri uyguluyorsunuz? Özellikle karşılaştığınız pratik vaka veya sık yapılan hataları paylaşabilir misiniz?
Güvenlik ilkesi
- Verileri doğrudan sorguya gömmek yerine, hazırlıklı ifadeler (prepared statements) ve bağlamalar kullanmak esastır. Özellikle dış kaynaklardan gelen filtrelenmemiş string verilerde enjeksiyon riski yüksektir.
- Verilerin türünü ve beklenen değerleri netleştirmek, mantıksal hatalardan kaçınmanın ikinci adımıdır. Örneğin, kimlik numaraları veya tarih alanları için uygun tip dönüşümleri yapılmalıdır.
Import akışı için pratik adımlar
KOD
123456
$pdo = new PDO($dsn, $user, $pass, $opts);
$stmt = $pdo->prepare("INSERT INTO products (name, price, category_id) VALUES (:name, :price, :category_id)");
foreach ($rows as $r) {
$stmt->execute([':name' => $r['name'], ':price' => (float)$r['price'], ':category_id' => (int)$r['cat']]);
}
Tipik riskler
- Doğrulanmayan girdilerle doğrudan SQL inşa etmek.
- Yeterince sınırlı olmayan INSERT/UPDATE operasyonları.
- Dosya yükleme ve saklama dizinlerinde güvenlik açığı.
Sizin projede hangi veri formatlarıyla import yapıyorsunuz, ve enjeksiyon riskini minimize etmek için hangi stratejileri uyguluyorsunuz? Özellikle karşılaştığınız pratik vaka veya sık yapılan hataları paylaşabilir misiniz?
