PHP Güvenliği #3

Veri Kontrolü
Veri kontrolü web uygulama güvenliğinin temel taşıdır ve programlama dilinden ve geliştirme ortamından bağımsızdır. Uygulamaya giren ve uygulamadan çıkan verilerin geçerliliğinin kontrolü anlamına gelir. İyi bir yazılım projesi tasarımı programıcıları aşağıdaki işlemleri yapmaya teşfik eder :

Kontrolsüz veri girişi olmamalıdır,

Geçersiz (kural dışı, hatalı, yasak) veri kontrolü geçmemelidir, ve

Bütün verilerin kaynkları mutlaka bilinmelidir.

Veri kontrolü ile ilgili birçok yöntem vardır. Bu yöntemler arasında iki tanesi çok kullanılmaktadır ve bu yönetm,emler yeterli seviyede güvenlik sağlarlar.

Yönlendirme Yöntemi (The Dispatch Method)
Bu yöntemde web yoluyla erişilebilen bir tane PHP betiği vardır. Diğer bütün PHP betikleri bu betik tarafından gerektiğinde include veya require fonksiyonları ile çağrılır. Bu yöntemde hangi betiğin çağırılacağı GET değişkeni ile belirtilir. Bu değişken basitçe çağırılacak betiğin ismi olabilir. Örneğin :

http://example.org/dispatch.php?task=print_form

dispatch.php dosyası web aracılığıyla ulaşılabilecek tek dosyadır. Bu yöntem programcıya iki önemli fayda sağlar :

dispatch.php ’de bazı temel güvenlik kontrollerini yaparak bütün uygulamada geçerli olmasını sağlanır.

Betiğe özel veri kontrolü gerektğinde ilgili betikte yapılabilir..

Daha fazla açıklama için dispatch.php :

/* Genel güvenlik kontrolleri */

switch ($_GET[’task’])
{
case ’print_form’:
include ’/inc/presentation/form.inc’;
break;

case ’process_form’:
$form_valid = false;
include ’/inc/logic/process.inc’;
if ($form_valid)
{
include ’/inc/presentation/end.inc’;
}
else
{
include ’/inc/presentation/form.inc’;
}
break;

default:
include ’/inc/presentation/index.inc’;
break;
}

?>

dispatch.php’in webten direk ulaşılabilen tek betik olduğu için ve diğer betikleri çağırdığı için genel kontrolleri dispatch.php’te yapılmasının doğru olacağı yukarıda belirtilmiştir. Ayrıca programcıya belli işlemle ilgili özel kontrolleri ilgili betikte yapılacağı da eklenmiştir. Örnekte end.inc ancak $form_valid değişkenin değerinin true olması durumunda çalıştırılır. $form_valid değişkenine başlangıçta process.inc çağırılmadan önce false değeri verilir. process.inc çalıştığında form doldurulmuşsa ve gerekli şartlar sağlanıyorsa (yani formun geçerliliği onaylanıyorsa) $form_valid değeri true yapılır ve end.inc dosyası çağırılır. Eğer form doldurulmamışsa yada bilgilerde bir yanlışlık veya eksiklik varsa process.inc $form_valid değerine dokunmaz ve form.inc çağrılır.

Not : Eğer webten direk ulaşılacak dosyaya dispatch.php yerine index.php adı verilirse betikleri çağırmak için URL’yi kullanılabilir. http://example.org/?task=print_form gibi.

Apache ForceType belirteciyle yapılandırarak URL’leri http://example.org/app/print-form gibi algılaması sağlanabilir.



Yorum gönder