benim her zaman kullandığım filtreleme fonsiyonu aşağıda, bununla filtreleseniz yeterli olur.
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
benim her zaman kullandığım filtreleme fonsiyonu aşağıda
(burada her zaman derken Dreamweaver CS3'ten sonra demek istediniz Galiba. Lütfen İnsanlara Bu Fonksiyonun MM ve Adobe Firmasının DWCS3 Ürünün Sunucu Bazlı Çalışmalarında Kullanılan Fonk. Olduğunu Belirtiniz.), bununla filtreleseniz yeterli olur.
(Bununla Fitrelemek Bırak Yeterli Olmasını Güvenliğin G Sini bile Sağlayamazsınız.)
Şimdi konumuza Gelecek Olursak...
Bo yukardaki fonksiyonun ne kadar sağlıklı çalıştığını ele alalım...
Mesela GetSQLValueString($_POST['mesaj'], "text") diyelim..
Normalde bu GetSQLValueString Fonksiyonu ile Güvenliği Sağlanmış bir Veri Haline Gelmiş Olmazı Lazım Doğrumu?
Şimdi bu veriye <html> Etiketlerini Gonderdiğim gibi aynen veritabanına bu html (php, asp, cgi hepsini gonderebilirsiniz.) olarak kaydedecektir.
Sonraki Husus...
Bu Fonksiyonda mysql_real_escape_string ve strpthls gibi fonksiyonlar devre dışı kalıyor bazı durumlarda. Hangi Durumlarda Pekii? Tipini Belirttiğiniz Durumlarda Yani "text"i "int", "double" gibi fonksiyon içinde geçen stringlerde.
Kısacası bu fonksiyon sadece şu işe yarıyor : Belirttiğiniz Tipe göre veritabanına kayıt yapar yada yapmaz (bkz.GetSQLValueString($_POST['mesaj'], "
text"))
Soru 1 : Pekii bu html etiketlerini nasıl temizleriz?
Cvp 1 : strip_tags($_POST['mesaj']); yada get mesaj.
Soru 2 : ben html kodlarını kaydetmek istiyorum ama sayfaya basarken html kodu gibi gorunsun istiyorum?
Cvp 2 : O zaman Şu şekilde temizleyeceksiniz htmlspecialchars($_POST['mesaj']); (direk html kodunu veritabanına alıp sayfaya basarken <code></code> yada <pre></pre> Etiketlerinin Arasına Alabilirsiniz.)
Soru 3 : Pekii bu \" Karekterlerini nasıl temizleriz?
Cvp 3 : mysql_real_escape_string($_POST['kullanici_adi']); , stripslashes($_POST['kullanici_adi'])
Soru 4 : Ben bu GetSQLValueString fonksiyonu kullanmadan veri tiplerini başka şekilde Belirleyebilir miyim?
Cvp 4 :Evet GetSQLValueString Fonksiyonunu Kullanmdan Yapabilirsinizi. MySQL Kullanıyorsanız Tablodaki alanların veri tiplerini belirleyebilirsiniz.
Soru 5 : Pekii Sadece integer (Tam Sayı) verileri için ne yapmalıyım?
Cvp 5 : Örnek veriyorum mesela sayfamız sayfa.php?id=12 ise bunu şu şekilde temizleriz. intval($_GET['id']);
vs vs vs...
Uzar Gider...
Dikkat ettim bu 3. sayfaya ulaşmış bi sürü insan tşk etmiş. işim e yaradı demiş şunu demiş bunu demiş. Ama işin enteresan tarafı kimse bu Fonksiyonlar için detaylı bilgi istememiş. Yani biri çıkıpta
"Hocam bu mysql_escape_string ve mysql_real_escape_string'in arasındaki fark nedir yada bu fonksiyonların biraz detaylarını alabilirmiyiz" Diye Soran olmamış. İşte burada ise bilgisizkten gelen altyapı oluşumu başlar ve bu programcı adayını ilerki donemlerde cok ziyadesi ile rahatsız edecektir.
Şimdilik Diyeceklerim Bunlar Güvenlik Hakkında Yardım Almak İsteyen Arkadaşlar Bana (PM ile değil lütfen Forumda Herkes Yararlansın) Ulaşabilirler.
NOT : Yardım Ekibindeki Arkadaşlar Sağolsunlar Güzel Yardımcı oluyorlar kendilerine tşk. etmek lazım ama Dikkate alınması gereken hususları es geçrlerse yardımın bi faydası olmadığı gibi zararı olacaktır çunku öğrenmek isteyen kişi yanlış bilgiler edinmiş olacak.
Tekrar Teşekkürler.
Kolay Gelsin.