Php _GET & _POST & Url & Int & Değişken & SQL Güvenliği
Php'de kodlama yaparken $_GET gibi değişkenlerden gelen zararlı karakterleri filtrelemek için bu yöntemleri öneririm:
Ben htmlspecialchars kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir. Eğer html kodlarından tamamen kurtulmak isterseniz $user_name=strip_tags($user_name)
Eğer sayısal bir değer gelmezse NULL değeri döner. 'sddd3' gibi bir değer için 3 döner. Eğer gelen sayısal değeri - ve + işaretlerinden arındırmak istiyorsanız: $user_id = abs($user_id);
A) $_GET & $_POST & Url & Int & DEĞİŞKEN GÜVENLİĞİ
1. İlk olarak gelen değişkendeki html karekterlerini zararsız hale getirelim (< yerine < gibi)$user_name= htmlspecialchars($_GET['user_name']);Veya
$name= filter_input(INPUT_GET, 'name', FILTER_SANITIZE_SPECIAL_CHARS);
Ben htmlspecialchars kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir. Eğer html kodlarından tamamen kurtulmak isterseniz $user_name=strip_tags($user_name)
2. Eğer aldığınız değer integer (sayısal) ise gerçekten sayısal mı diye kontrol edelim
$user_id =intval($_GET['user_id']);Veya
$user_id = filter_input(INPUT_GET, 'user_id', FILTER_SANITIZE_NUMBER_INT);Ben intval kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir.
Eğer sayısal bir değer gelmezse NULL değeri döner. 'sddd3' gibi bir değer için 3 döner. Eğer gelen sayısal değeri - ve + işaretlerinden arındırmak istiyorsanız: $user_id = abs($user_id);
3. Eğer aldığınız değer url içeriyorsa güvenlik için şu şekilde kullanalım (Bu sefer POST yöntemi için örnek verelim)
$url = urlencode($_POST['url']);
Veya
$url = filter_input(INPUT_POST, 'url', FILTER_SANITIZE_ENCODED);
Ben urlencode kullanıyorum. Farkı yok. Fakat filter_input en az PHP 5.2.0 gerektirir. Eğer encode edilmiş url'yi decode etmek isterseniz: $url=urldecode($url);
B) SQL GÜVENLİĞİ
1. Eğer SQL sorgu cümlesi içerisine ' gibi özel karakterler girip sorun çıkarmasını istemiyorsanız sorgunuzu çalıştırmadan önce sql cümlenizi filtrelemeniz gereklidir.// PDO
$safe = $db->escape_string($name); // OOP Style
// MySQLi
$safe = mysqli_real_escape_string($db, $name); // mysqli
// mysql_*
$safe = mysql_real_escape_string($name, $db);
// Genel Kullanım (Son Çare Olarak Kullanılabilir)
$safe = addslashes($name);
Yorumlar
Yorum Gönder