Aslına bakarsanız PHP’ de güvenlik, insanda güzellik gibi göreceli bi kavramdır biz ne kadar güvenlik önlemleri alırsak alalım muhakkak ki scriptlerimizin hacklenmeyeceğinin garantisi yoktur ama bu işi zorlaştırabiliriz ya da caydırıcı bir hale neden getirmeyelim ki ?
1 – Form Güvenliğini Sağlamak – HTML – Javascript – PHP ve benzeri kodları engellemek
PHP ‘ de formdan gelen verilerde kullanıcılarınız formdan zararlı javascript ya da html kodları (yönlendirme kodu gibi) gönderebilir, bunun önüne geçmenin 2 yöntemi var ilki script_tags(); fonksiyonu bu fonksiyon formdan gelen kodları süzerek olduğu gibi yazdırır
if($_POST){
$isim = strip_tags($_POST['isim']);
echo $isim;
?>
Yukarıdaki fonksiyonda formdan gelen html,php ya da vb dillerde kod parçası girdiğimizde otomatik olarak kodlarla beraber sayfaya yazdıracaktır yani burada kodlar etkisiz hale gelecektir.
Not : Süzülmesini istemediğiniz kodlar var ise bunu parametre olarak belirtebilirsiniz bkz : 1.1
1.1 :
"); ?>
gibi.
bunun bir benzeri olarak birde htmlentities(); fonksiyonu mevcuttur, fakat htmlentities();’te tek fark vardır < ve > karakterlerini yazdırmaz dolayısıyla kodlar etkisiz hale gelmiş olur. bkz : 1.2
1.2
$veri = "Farzedelim ki bu zararlı bir html ya da js kodudur";
echo htmlentities($veri);
?>
yukarıdaki kod bize çıktı olarak aynen şöyle dönecektir;
bir diğeri ise strip_tags(); a benzer yapıda olan htmlspecialchars fonksiyonudur, onu es geçiyorum mantığı strip_tags() ile aynıdır.
2 – sQL Injection Açıklarından Korunmak
PHP adres satırı ya da formdan ziyaretçilerimiz veritabanına sQL sorguları gönderebilir (nasıl gönderileceğini açıklamıyoruz tabii ki) bu sQL sorgularıyla ise veritabanındaki bilgilerimize (bi nevi özelimize) rahatlıkla ulaşabilir ve müdahale edebilir (silme,düzenleme) bu yüzden formdan girilen bilgilere sQL kodlarını enjekte etmeliyiz ki (yani süzmeliyiz) formdan ya da adres satırından gelebilecek olan saldırı tarzı sorgulara karşı önlem almalış olalım. Bunu ise şöyle yapabiliriz : Bkz 1.3
1.3
$formdan_gelen_veri = mysql_real_escape_string($_POST['formdan_gelen_veri']); // ya da
$adres_satırından_gelen_veri = mysql_real_escape_string($_GET['adres_satırından_gelen_veri']);
?>
Burada mysql_real_escape_string(); fonksiyonu ile formdan gelen escape karakterleri yani tek tırnak (‘) ve çift tırnak karakterlerini zararsız hale getirerek (ki burada çift tırnak ve tek tırnakları yine yazdırır) bize temiz halde yeniden çıktı olarak verir.Peki neden tırnakları aldırıyoruz ? sQL ınjection açığı işte tamda burada devreye giriyor çünkü veritabanına sorgu gönderirken sorgular içerisinde ki şartlı deyimlerde tek tırnak kullanıyoruz. adi=’xx’ or soyadi=’nn’ gibiyse gibisinden..
Bu yazı ileride güncellenecektir.
Kaynak : PHP Güvenlik Rehberi