İçerikler
PDO ile MySQL kayıt işlemlerini prepare fonksiyonu ile gerçekleştiriyoruz. Bu metodu önceki derslerde fazlasıyla ayrıntılı bir biçimde işlemiştik. Prepare’nin en önemli özelliği SQL Injection açıklarından bizi kurtarmasıdır. Bu derste hem kayıt işlemini gerçekleştireceğiz hem de bu açıklardan bizi nasıl kurtarmış olduğunu göreceğiz. Dilerseniz örnekler üzerinden kayıtın nasıl gerçekleştiğine bakalım.
Güvenlik Tedbirli, MySQL Kayıt İşlemi [1. YOL]
Kullanıcıdan gelen verilerin içeriği bizim için önemlidir. Buradaki önem gelen değerlerin gerçek bir veri olması veya saldırı teşkil edecek kodlar olmasıdır. “Bu devirde babana bile güvenmeyeceksin” denildiğine göre sitene gelen ziyaretçilere hiç güvenmemelisin. Veri tabanımızı koruyarak veri kayıt işleminin nasıl olduğunu görelim.
$baslik = "Deneme Başık\"da geçen ''''''2'' ''\"'' '' '' "; $time = date("d.m.Y - H:i:s"); $Kayit = $vt->prepare("insert into makale set baslik=?,tarih=?"); $Kayit->execute(array($baslik,$time));
Yukarıdaki örnekte; Veri tabanına kayıt yaparken bizlere sıkıntı yaratacak karakterler yer almaktadır. Herhangi bir düzenleme yapmamamıza rağmen kayıt işlemi gerçekleşecekti. Fakat PDO yerine mysql_ ifadesini kullanmış olsaydık kayıt işlemi gerçekleşmeyeceği gibi, gelen saldırı yüklü kod ile veri tabanımız hasar almış olacaktı.
PDO kullanarak bu şekilde gelen verileri neredeyse hiç filtreden geçirmeksizin kayıt işlemini yapmak mümkündür. Bu sayede kod alanlarımız az ve temiz bir görünüme sahip olacaktır. Bununla beraber performanslı bir sistem hazırlamış olacağız.
Güvenlik Tedbirli, MySQL Kayıt İşlemi [2. YOL]
Bu yeni bir kullanım değildir. Daha doğrusu burada farklı bir işlem gerçekleştirmiyoruz. Sadece belirlenen değerleri birer değişkene atayıp o şekilde işlemlerin yapılmasını sağlıyoruz. Örnek olarak aşağıda yer alan kodu incelebilirsiniz.
$baslik1 = "Deneme Başık\"da geçen ''''''2'' ''\"'' '' '' "; $time1 = time(); $Kayit1 = $vt->prepare("insert into makale set baslik=:baslik,tarih=:tarih"); $Kayit1->execute(array("baslik" => $baslik1, "tarih" => $time1));
Bu kod ile de 1. Yolda yer alan kod arasında işlem ve güvenlik anlamında herhangi bir fark yoktur. Buradaki tek fark ” ? ” (Soru İşareti) ile belirlediğimiz yeri artık bir değişken adı ile belirlemedir. Bu yöntem sadece kod sahibinin tarzına bağlı olarak kullanabileceği bir değişik yoldur.