PHP Dersleri

PHP ile Güvenli Kodlama İpuçları

PHP Programlama dili bildiğiniz gibi oldukça popülerdir. Kullanım esnekliği ve bir çok dilde makale ve videoların yer alması dilin popüler olmasına ve yayılmasına neden olmuştur. Popüler olmasının avantajlarının yanında dezavantajlarıda bulunmaktadır. Bunlardan birisi ve en önemlisi güvenlik önlemleridir. Bu makalede güvenlik önlemleri üzerinde duracağız.

Filtre Uygulama

Kullanıcılardan alınan veriler her zaman için veritabanı üzerinde tehdit unsurudur. Bunun için kullanıcıdan veri alırken, veri türüne göre filtreleme uygulayarak kayıt yada sorgu işlemleri gerçekleştirilmelidir. PHP ile hazırlanan her sayfa, her sorgu ve her işlem için filtrelemeyi unutmanız kodlarınızın her zaman için tehlikede olduğu anlamına gelecektir.

Filtreleme İpuçları

Filtreleme için fonksiyonlardan yardım alabilirsiniz. Hatta kendi fonksiyonunuzu oluşturarak daha güvenli sistemler oluşturabilirsiniz. Örnek olarak aşağıdaki kodları inceleyelim.

<?php
## Metin yada karakter değerleri
function string($data){
   $data    = $data;
   return $data;
}
## Sadece sayısal değerler
function intager($data){
   $data    = $data;
   return $data;
}
?>

Yukarıda yer alan örnekte string ve intager fonksiyonları bulunmaktadır. Bu fonksiyonları kullanarak kullanıcıdan elde edilen yazı yada sayısal değerler hazırlanan bu fonksiyonlardan geçirilerek güvenlik önlemleri sağlanabilir.

function string($data){
   $data    = trim($data);
   $data    = strip_tags($data);
   return $data;
}

Örnek olması açısından yukarıdaki gibi eklemeler yapılabilir. Tabi ilk olarak değerin metinsel mi yoksa sayısal bir değer mi olduğunu kontrol etmek ilk aşamada en iyisi olacaktır. Sayısal değerler içinde yine filtre uygulanmalıdır.

reGEx Kullanımı

PHP ile veri kontrolleri fonksiyonlar yardımıyla yapılabileceği gibi regex kullanılarakta gerçekleştirilmektedir. Uygunluk kontrolü yapmak için kullanılması, verinin tam olarak belirli şartlarda elde edilmesini sağlayacaktır. Buda aksi bir değerin gönderilmemesini sağlayacaktır. Kullanıcı dediğin, yazılımcının çizmiş olduğu çizgiden çıkmaz! ( Emin olun çıkmak için elinden gelen her şeyi yapacaktır. )

<?php
## Kontrol Fonksiyonu
function mailKontrol($data){
   $desen   = '/^[a-z]+[A-z0-9\-_\.]+@[A-z0-9\-]+\.[A-z0-9\-]+/';
   if( preg_match($desen, $data) ){
      return true;
   }else{
      return false;
   }
}
## Kontrol Edilecek Değer
$mailKontrol = mailKontrol("ibrahimcevruk@hotmail.com");
## Kontrol İşlemi
if( $mailKontrol ){
   echo "Doğru";
}else{
   echo "Yanlış";
}
?>

Yukarıda yer aldığı gibi regex desenlerini fonksiyonlar halinde hazırlayarak veri tiplerine göre filtreleme ve kontrolü sağlayabilirsiniz. Böylelikle çizmiş olduğunuz çizgiler doğrultusunda kullanıcının ilerlemesini sağlayabilirsiniz.

Hata Raporlarının Yönetimi

Hata raporlarının kullanıcılara gösterilmesi bir faciadır. Hata raporunu gören bir kullanıcı; dosya adınız, gönderilen değerleri, klasör yapılarını gibi bir çok bilgilere rahatlıkla ulaşabilir. Aynı zamanda rapordaki açıklardan yararlanarak sisteme rahatlıkla sızabilir. Bu gibi durumları yaşamamak için projeler kullanıcılara sunulduğu zaman hata raporları kapatılmalıdır.

error_reporting(0);

Yukarıda yer alan kodu sayfanın en başına yazdığınızda doğacak olan tüm hata mesajları gizlenecektir. Bu kod sayesinde kullanıcıların hataları görmesi engellenecektir. Buda güvenlik çözümü olacaktır.

SQL Enjeksiyonuna Önlem Alma

SQL enjeksiyonuna önlem almak için ilk olarak bazı karakter setleri kontrol edilebilir. İkinci olarakta kodlama türü olarak PDO kullanılabilinir. SQL enjeksiyon açığı mysql_* ifadelerinde daha fazla yaşanmaktaydı. Fakat PDO ve MySQLi ile hemen hemen çözülmüş durumda. Her ne olursa olsun tedbiri elden bırakmamak gerekiyor tabi.

<?php
$veri    = " index.php?id=' or '1'='1' ";
if (preg_match("/[\-]{2,}|[;]|[']|[\\\*]/", $veri)){
   echo "Saldırı amaçlı karakterler içermektedir.";
  }else{
   echo "Kullanıma Uygundur";
}
?>

Yukarıda yer alan regex deseninde zararlı olan karakter setleri tespit edilmektedir. Eğer böyle bir değer varsa hata mesajı iletilecektir. Bu kullanımı GET verilerinde ve kullanıcıdan alınan verilerde kullanabilirsiniz. Aynı zamanda string ve intager fonksiyonlarına bu işlemi dahil edebilirsiniz. SQL açıkları ile ilgili detaylı bilgilere SQL Injection Açıklarından Kurtulma Yollarıadlı makaleden ulaşabilirsiniz.

Daha Fazla Göster

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Kapalı