Sayfalar

15 Nisan 2017 Cumartesi

PHP - Güvenlik Fonksiyonları


Web sayfamızda metin alanı içeren kısımlara (arama, iletişim,anket vs.) kullanıcıdan gelen istekler ile sonuç üretildiği için gelen istekleri filtrelemeliyiz. Bu istekler içerisinde zararlı kodlar olabilir, bu sebepten dolayı gelen her veriyi bazı filtrelerden geçirerek zararsız hale getirmeliyiz. Filtreleme için hazır halde bulunan fonksiyonlar vardır. Bunlardan bazılarının kullanımını göreceğiz.


htmlspecialchars(string);

Bazı HTML karakterlerini pasif karakterlere dönüştürür. Aşağıdaki örnekte soldaki karakterleri sağdaki karakterlere dönüştürerek zararsız hale getirir.

&   - &
"   - "
'   - '
<   - &lt;
>   - &gt;

Sadece belirli karakterlerin dönüştürülmesini istiyorsak 2.parametre olarak aşağıdaki etiketleri kullanabiliriz.
ENT_COMPAT       - Sadece çift tırnakları çevirir
ENT_QUOTES       - Çift ve tek tırnakları çevirir
ENT_NOQUOTES - Tırnakları çevirmez

Kullanımı :

<?php 
$metin = "Bu & fonksiyon 'güvenlik' için kullanılabilir."; 
echo $metin; 
// Bu & fonksiyon 'güvenlik' için kullanılabilir. 
echo htmlspecialchars($metin,ENT_QUOTES); 
//Bu & fonksiyon &#039güvenlik&#039 için kullanılabilir. 
?>

strip_tags($degisken);

Genellikle formdan gelen verilerdeki html etiketlerini temizlemek için strip_tags() fonksiyonu kullanılır. Aşağıdaki örnekteki kullanımda script tag'ını siliyor ve kalan metni olduğu gibi veriyor.

Kullanımı:


<?php
$degisken="<script>alert('xss')</script>Deneme metni ";
echo strip_tags($degisken);
//ekran çıktısı : alert('xss') Deneme Metni
?>

addslashes($degisken);

Tırnak işaretinin önüne slash(/) işareti ekleyerek onu etkisiz hale getirir ve veritabanı ile ilgili işlemlerde sorun çıkmasını engeller.

Kullanımı:


<?php
$degisken="Türkiye'nin başkenti Ankara'dır.";
echo addslashes($degisken);
//ekran çıktısı : Türkiye\'nin başkenti Ankara\'dır.
?>

filter_var();

PHP 5.2 sürümü ile gelen bu fonksiyon ile doğrulama işlemlerini kolayca yapabiliriz. E-Mail, IP, MAC, URL, sayı doğrulamalarını kolayca yapabiliriz.

Kullanımı:


<?php
/* Email Doğrulama */
if ( !filter_var($email, FILTER_VALIDATE_EMAIL)){
return "email doğrulanmadı";
}
/* Email Doğrulama Kullanım 2 */
if (filter_var($email, FILTER_VALIDATE_EMAIL)){
echo "Geçerli Email";
}else
{ echo "geçersiz email"; }
/* IP Doğrulama */
if (!filter_var($ip, FILTER_VALIDATE_IP)){
return "geçersiz ip adresi";
}
?>

filter_var() fonksiyonu ile daha detaylı bilgiye buradan ulaşabilirsiniz.

Web sayfalarınızın güvenliği için veritabanı bağlantılarınızda mutlaka PDO kullanmaya dikkat edin. Sorgularınız prepare ve execute yapısı ile filtreden geçer ve güvenli bi bağlantı sağlamış olursunuz. Aşağıdaki örnekte insert sorgusu ile PDO kullanımının örneğini göreceksiniz.


<?php
$bag=new PDO("mysql:host=localhost;dbname=veritabani_adi;charset=utf8","root","");
$sorgu=$bag->prepare("insert into tabloadi set baslik=?,icerik=?");
$sorgu->execute(array($baslik,$icerik));
$sonuc=$sorgu->rowCount();
if ($sonuc){
echo "Kayıt başarılı";
}else{
echo "Kayıt başarısız";
}
?>

Pdo ile ilgili daha fazla bilgi için;
http://php.net/pdo

Hiç yorum yok:

Yorum Gönder