PHP Güvenliği #5
By husmen73 on Tem 18, 2008 in PHP
Veri Kontrolü
Beyaz liste yönteminin daha doğru bir yaklaşım olduğu belirtilmişti. Her duruma uygun örnekler vermek zor olsa da temel olarak veri kontrolü hakkında fikir verecek basit örnekler aşağıdadır.
E-posta adresinin düzgün yazılıp yazılmadığının kontrolü:
<?php
$clean = array();
$email_pattern = ’/^[^@\\\\\\\\\s<&>]+@([-a-z0-9]+\\\\\\\\\.)+[a-z]{2,}$/i’;
if (preg_match($email_pattern, $_POST[’email’]))
{
$clean[’email’] = $_POST[’email’];
}?>
$_POST[’color’] değişkenin değerinin red, green, yada blue olduğunun kontrolü:
<?php
$clean = array();
switch ($_POST[’color’])
{
case ’red’:
case ’green’:
case ’blue’:
$clean[’color’] = $_POST[’color’];
break;
}?>
$_POST[’num’] değerinin sayı olup olmadığının kontrolü:
<?php
$clean = array();
if ($_POST[’num’] == strval(intval($_POST[’num’])))
{
$clean[’num’] = $_POST[’num’];
}?>
$_POST[’num’] değerinin ondalıklı sayı (float) olup olmadığı:
<?php
$clean = array();
if ($_POST[’num’] == strval(floatval($_POST[’num’])))
{
$clean[’num’] = $_POST[’num’];
}?>
İsimlendirme
Yukarıdaki örnekler de $clean dizisi kullanılmıştır. Bu veri kontrolü için açıklayıcı bir örnektir. $_POST ve $_GET dizilerindeki verileri kontrol edilip eğer uygunsa $clean dizisine atılır.$_POST ve $_GET dizileri her zaman şüpheli olarak kabul edilmelidir.
$clean dizisini kullandıldığında beyaz liste yöntemine göre bu diziye girmeyen bütün veriler şüphelidir. Bu yaklaşım programın güvenlik seviyesini artırır.
Kontrolden geçen bütün veriler $clean dizisine atıldığı için karşılaşabilecek en kötü durum bürün verilerin zararlı olması durumundaki boş $clean dizisidir.
Zamanlama
Bir PHP betiği çalışmaya başlatıldığında HTTP iletişimi bitmiş demektir. Yani İstemci tarafından artık hiçbir veri gönderilemez (register_globals açık olsa bile). Bu sebepten dolayı tanımlanan bitin değişkenlere başlangıç değeri verilmesi çok önemlidir.
Hata Raporlama
PHP5’ten önceki sürümlerde hata raporlama işlemini bazı belirteçleri ayarlanarak kolayca yapılabilir. Bu süürmlerde hata raporlama programlamadan çok PHP yorumlayıcısı tarafından yapılır. Bunun için kullanılacak belirteçler :
error_reporting
Bu belirteç hata raporlama seviyesinin belirlenmesini sağlar. Değerinin E_ALL olması tavsiye edilir.
display_errors
Bu belirteç hataların ekrana yazılıp yazılmayacağını belirtilmesine yarar. Geliştirme aşamasında değeri On olursa hatalar anlaşılır. Uygulama kullanılmaya başlandığında değerinin Off yapılması daha uygundur. Böylece hatalar kullanıcılardan ve hataların faydalı olacağı art niyetli kişilerden gizlenmiş olur.
log_errors
Bu belirteç hataların belirli bir log dosyasına yazılıp yazılmayacağının belirtilmesini sağlar. Değerinin On olması durumunda çalışmada yavaşlamaya sebeb olabilir. Geliştirme aşamasında kullanılması tavsiye edilir.
error_log
Hata raporlarının yazılacağı dosyanın tam yoludur. Burada dosyayı belirtirken dosyaya web sunucusunun yazma yetkisi olup olmadığına dikkat edilmelidir.
error_reporting belirtecinin değerinin E_ALL olması programcı tarafından kullanılan değişkenlere başlangıç değeri verilmesini zorlayacak ve başlangıç değeri verilmemiş bir değişken kullanıldığında uyarı verecektir.
Not : Bu belirteçlerin değeri ini_set() fonksiyonu kullanılarak değiştirilebilir. Bu fonksiyonu php.ini dosyasında değişiklik yapılamadığı durumlarda kullanılabilir.
Daha ayrıntılı bilgi için :
http://www.php.net/manual/en/ref.errorfunc.php
PHP5 ile birlikte PHP’ye Kural Dışılık İşleme (Exception Handling) özelliği eklenmiştir.














Yorum gönder