Doğru Cevap
-
mysql_* fonksiyonları oldukça eskidir. Her ne kadar yazdığınız fonksiyon/class güvenlik sağlasada size tavsiyem PDO kullanın. Zaten php geliştiricileri php 5.4 ile mysql_* fonksiyonları Soft deprecated olarak belirledi. Yani ilerleyen sürümlerde tamamen kaldırılması gündemde. mysql_* fonksiyonları yerine PDO veya mysqli kullanmaya herkesin yavaş yavaş başlaması gerekmektedir.
-
siyahbeyaz
cevabın için tsk ederim. ama maksat pdo yerine kendi classımızı kullanmak. ve kendimizce güvenlik acıkları tanıyıp nasıl kapatılacagı. bunla ilgili fikrilerinizi ögrenmek istiyorum..11 yıl önce yazılmış -
xuma
:) Kesali'nin dediği gibi yakında mysql fonksiyonları kullanmıyacak.Bende uzun süredir PDO kullanıyorum onun eksikleri ve kullanımına odaklanıyorum.11 yıl önce yazılmış -
siyahbeyaz
hala hala ? ilginç arkadaşlar siz böyle diyince aklımda bir sürü soru işaretleri başladı. mysql_query gibi fonksiyonlar tarih olacak. yeni gelen sistemlerde calısmayacak diyorsunuz. onca yapılan calısma proje heba olacak yani? benim gibi bir sürü mysql_ kullananlar var. bu bir kaos gibi :S11 yıl önce yazılmış -
Kesali
Tavsiye niteliğindeydi sadece. Sizin konunuza dönelim o zaman.
Öncelikle verdiğiniz class taki obje herhangibir escape işlemi gerçekleştirmiyor. Zaten kendi mysql serverınızı hacklemek istemeyeceğiniz için query yolladığınız kısımda güvenlik açığı aramanıza gerek yok. Asıl sorun dışarıdan serverınıza gelen sorguları validate ve escape etmek. Yani eğer bir id integer değerini çağırmak için kilit nokta integer olup olmadığını kontrol etmek veya biraz daha fazla güvenlik istiyorsanız. Belirli bir aralığın içinde bir integer değeri olup olmadığını kontrol etmektir. Sizin örnek kodunuz escape etmez sadece sprintf ile belli oranda validate edebilirsiniz. Escape etmediği için string türündeki verilerde hala sql injection yeme şansınız vardır.11 yıl önce yazılmış 11 yıl önce güncellenmiş -
xuma
Orjinal başlık http://www.phpclasses.org/blog/post/153-The-Plot-to-Kill-PHP-MySQL-Extension.html bu.Sadece tartışılmakta ve tartışılmaya başlanması bile oldukça önemli.Belki yakın gelecekte olmasa bile ilerleyen zamanlar içerisinde mysql eklentisi gidecek.Büyük ihtimalle birçok hosting firması kullanılacak sürümü seçmenizi sağlayacak opsiyonlar geliştirecek.Diğer türlü dediğin gibi kaos ortamı yaşanır.
Mysql güvenliğini sağlamak için aslında hali hazırdaki birkaç fonksiyonunu kullanmak yeterli günümüzde artık XSS ve CSRF için daha fazla çalışma yapılabiliyor.Wordpress 3.3.0 versiyonunda bile XSS açıkları bulunması yaptığımız yazılımlarda bu tarz ufak hataların bulunup bulunmadığını düşündürüyor.
Ben msyql eklentisini kullanmayalı çok uzun süre oldu ve gerçekten birkaç parametre ile güvenliği sağlamak oldukça kolay ve eğlenceli.11 yıl önce yazılmış -
siyahbeyaz
bildigim kadariyla java firması mysql u satın almıs. olayların gelısmesını buna baglayabılır mıyız11 yıl önce yazılmış -
siyahbeyaz
o zaman bizde simdiden kollarımızı sıvayalım pdo ile class yazalım11 yıl önce yazılmış -
Kesali
Java (oracle yani) mysql i satın alması ile php içinde gelen php_mysql extensionı yeniden yazılarak mysqlnd olarak paketlendi. Yani php geliştiricileri 5.3 ile kendilerinin yazmış oldukları kütüphaneyi kullanır oldular, aralarında yasal veya yazılımsal hiçbir engel yok.
Asıl olay şu php hızlı bir şekilde gelişiyor mysql_ fonksiyonları çok eskide kaldı. Maalesef insanları zorlamazsalar PDO classının kullanımı artmayacak. En azından tartışılması bile birçok yazılımcıyı PDO kullanımına teşvik etmiştir.
PDO birçok avantaja sahiptir. Prepared statement çok etkili bir sql injection önleme yöntemidir mesela. PDO transaction aynı şekilde veri tabanında toplu işlem yapmamıza oluşabilecek bir hatada rollback ile veri geri dönebilmemizi sağlar.
Şu ana kadar duyduğum tek eksi yanı çoklu queryi desteğinin olmamsı.11 yıl önce yazılmış -
siyahbeyaz
coklu query derken tam olarak neyi kast ettiniz. döngü icinde sorgumu ?
$sql = mysql_query("Select * from tablo");
while ($yaz = mysql_fetch_object($sql) {
$sql2 = mysql_query("select * from tablo2 where tb2id='$yaz->id' ");
...
}
gibi bir kullanım mı11 yıl önce yazılmış -
siyahbeyaz
hımm bak bunları bılmem cok iyi oldu. eski mysql ile class yazıcaktık.. classı yeni pdo uyumuna göre yazmak daha iyi olacaktir. eski usul ile yapılan calısmaları yeniden kodlamak epey can sıkıntısı yaratacaktır.11 yıl önce yazılmış -
xuma
Çoklu query bildiğim kadarıyla ;$sql="DELETE FROM kitaplar;create table saticilar satici(id INT);insert into kitaplar(id,isim) values('1','isim1');insert into kitaplar(id,isim) values('2','isim2');"; $sorgu=mysql_query($sql);
Şimdiye kadar hiç kullanmadım 5.3 ile pdo desteği geldiğini bir ara okudum sanırım ama problemli bir konu olduğu için hiç uğraşmadım.Yoksa yukarda verdiğin örnek ve benzeri uygulamalar pdo ile daha kolay.$sorgu = $db->("INSERT INTO kitaplar (adi,isbn, yazar_id) values (?, ?, ?)); foreach ($a as $b){ $sorgu->execute(array($b->adi, $b->isbn, $b->id)); }
veya diyelimki;$sorgu = $db->("INSERT INTO kitaplar (adi,isbn, yazar_id) values (?, ?, ?),(?, ?, ?),(?, ?, ?)); $sorgu->execute(array('lorem','ipsum','sit','lorem','ipsum','sit','lorem','ipsum','sit'));
alanları kontrol etmekte kolay;$sorgu = $db->("INSERT INTO kitaplar (adi,isbn, yazar_id) values (:adi,:soyadi, :isi)); $sorgu->bindParam(':adi',$kitapadi,PDO::PARAM_STR, 15);
11 yıl önce yazılmış -
Kesali
Php.net ten alınmış multi query örneği.$mysql = new mysql('localhost', 'user', 'pw', 'db'); $query = 'show tables;'; $query.= 'show tables;'; $query.= 'select * from dummy_table;'; $query.= 'show tables;'; // this statement will be ignored as the dummy_table doesn't exist and the loop should quit $mysqli->multi_query($query);
Çok iyi yapmışsınız classınızı pdo ya çevirerek.11 yıl önce yazılmış -
xuma
Active records kullanmama rağmen doctrine(http://www.doctrine-project.org/) hep ilgimi çekti.11 yıl önce yazılmış -
siyahbeyaz
pdo ya alısmak zaman alacak gibi... bos bır vakıte tum konularını ıncellemem lazım11 yıl önce yazılmış -
siyahbeyaz
saqolun arkadaslar. pdo ile ilk projemi yazdım.. bu arada coklu sql olayı ıcınde prepare olayı var. her birseyi tek tek ince detayına kadar düsünülmüs. fazlası var eksigi yok..11 yıl önce yazılmış -
Kesali
Zaten birkaç güne öğreneceğinizi biliyordum. Zamanla mysql_ komutlarıyla neden vakit öldürmüşüm diyeceksiniz.
Çoğu işlem oldukça basitleştirilmiş. İyi çalışmalar size.11 yıl önce yazılmış -
siyahbeyaz
saqol tsk ederim aynen ole dusundum. simdide diyorum daha onceki projeleri neden boyle yapmadım. iş güc yogunlugundan bu tur seyleri takip etmeye vaktimiz olmuyor. pdonun calisma sistemi aynı java gibi. ilginc olan su ki kod sırasına bakmıor.
misal
$db->bindParam(1,$title);
$db->bindParam(2,$content);
$db->execute();
$title="Merhaba PDO";
$content = "Hacılar PDO kendini aşmış gidiyor.. \n buda yeni birsey herhalde..";
gibi bir kullanımda altaki titleyi alip ekliyor. beni en cok sasirtan özelliklerinden biride bu oldu11 yıl önce yazılmış
-
Cevaplar
Hiç cevap bulunamadı.