Bugün sizlere php kodlamalarımızda dikkat etmemiz gerek güvenlik unsurlarından bahsedeceğim.
Konunun takip edilmesi beğenilmesi söz konusunu olursa konu hakkında devam dersleri yazmayı düşünüyorum.
Dersimize başlayalım
Öncelikle tüm kod yazan insanların -insan olmasından kaynaklanan bir durum olduğu için- hata yapabileceği inancındayım.Ne kadar uzman olursa olsun ne kadar uzun tecrübelere sahip olursa olsun hata kaçınılmazdır.Bu hata bazen kritik seviyede bir açık barındırır,bazen de basit bir notice dir.
Php scriptlerimizi kodlarken hatalarımızı görmek için error_reporting() fonksiyonunu kullanılırız.
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', '/usr/local/apache/logs/error_log');
bu şekilde kullandığınızda hatadan haberdar olursunuz ama hatayı ekrana basmayacaktır.
Kötü niyetli kişilerin "Hacker,Attacker" vs kullandığı ilk yöntem siteyi hata vermeye zorlamaktır.Hata alırsa aldığı hata neticesinde kullanabileceği açıkları aramaktadır.Sql İnj. Xss vs gibi...
Güvenlik bir bütündür ve hataların ekrana basılmaması hatanın olmadıgı anlamına gelmez.Bu hataların ivedilikle önem derecesine göre düzeltilmesi gerekir.
Php sizlere başka bir fonkisyon daha sunmaktadır.
function my_error_handler($number, $string, $file, $line, $context)
{
$error = "= == == == ==\nPHP Hatası\n= == == == ==\n";
$error .= "Number: [$number]\n";
$error .= "String: [$string]\n";
$error .= "File: [$file]\n";
$error .= "Line: [$line]\n";
$error .= "Context:\n" . print_r($context, TRUE) . "\n\n";
error_log($error, 3, '/usr/local/apache/logs/error_log');
Bu şekilde hata kayıtlarını hangi dosyanın kaçıncı satırında ne hatası verdiğini kolaylıkla bulabilirsiniz.
Bir diğer husus post verilerimizdir.Hemen hemen her projemizde kullandığımız post bizim için bulunmaz bir nimetken bizim en büyük düşmanımız haline gelebilir.
$filename = $_POST['filename'];
while (strpos($_POST['filename'], '..') != = FALSE)
{
$filename = str_replace('..', '.', $filename);
}
?>
Burada posttan gelen filename'i doğrudan filename değişkenine atayıp o şekilde kullanırsak ve filename bize posttan .../.../etc/passwd şeklinde gelirse ne olur?
Sunucumuzda bulunan tüm hesapların pass hashlerinin tutulduğu dosyaya erişim sağlamaz mı?
peki basit bir while döngüsü ve strpos ve str_replace fonksiyonlarımızı kullanarak ne yapıyoruz. gelen veriyi filtreliyoruz.Dolayısıyla başlangıç seviyesinde de olsa bir güvenlik tedbiri alıyoruz.
En kısa sürede yeni doküman ile karşınızda olacağım.
Sorusu olanlara bu başlığın altından seviyeli bir şekilde sorabilir.