PHP Güvenlik Fonksiyonları (POST – GET)

Php güvenlik fonksiyonları konumuzda kullanıcıdan veri alırken basit bir fonksiyon ile güvenlik önlemi nasıl alınır onu inceleyeceğiz. Php programlama belki de en fazla kullandığımız değişkenler post  ve get global değişkenleridir. Bu iki değişkeni kullanıcılardan veri almak için kullanıyoruz. Programlama yaparken her zaman kötü niyetli kişileri düşünerek hareket etmeliyiz. Php güvenlik zafiyeti çalışmalarınızın, harcadığınız zamanın boşa gitmesine neden olabilir. Çok kullandığımız bu değişkenlerin hem yazımını daha basit hale getirmek hem kontrolleri basit bir fonksiyon ile yapmak hem de ufakta olsa bir güvenlik önemli almak için kullanılabilir.

Php öğrenmeye ilk başladığımda bende uzun uzun değişkenlerin adını yazıyordum. Değişkenleri yazdığım yetmiyormuş gibi boşlukları temizle, tırnak işaretlerini temizle, html kodları temizle derken o satır uzayıp gidiyordu ancak Tayfun Erbilen‘in bir videosunda bu değişkenler için yazdığı fonksiyonu görene kadar. Oldukça kullanışlı olan ve yazımı oldukça hızlandıran bu fonksiyonların videosu çok eski, hangisi olduğunu hatırlamıyorum.

Fazla uzatmadan kısaca POST ve GET için php’nin sağlamış olduğu bazı fonksiyonlar var bunları tek tek yazmak yerine kendi fonksiyonumuzda birleştirerek tüm kontrolleri tek seferde halletmiş olacağız.

Php Fonksiyonlar konusundan fonksiyon tanımlama hakkında kısaca bilgi sahibi olabilirsiniz.

POST Fonksiyonu

Post fonksiyonundan önce değişkenleri aşağıdaki gibi tek tek kontrol ediyorduk.

<?php
$uye_adi = htmlspecialchats(addslashes(trim($_POST["uye_adi"]));
$uye_sifre = htmlspecialchats(addslashes(trim($_POST["uye_sifre"]));
?>

Yukarıdaki örnek kullanımda sadece iki değişkenle örnek verdim, bazı durumlarda oldukça fazla değişken oluyor tek tek bunları bu şekilde yazmak hem karmaşık hem de zaman kaybına sebep olacaktır. Bu karmaşıklığı ve zaman kaybını oluşturduğumuz fonksiyon ile önleyebiliriz. Aşağıdaki fonksiyonu inceleyelim.

<?php 
function p($par, $st = false)
{
    if ($st) {
        return htmlspecialchars(addslashes(trim($_POST[$par])));
    } else {
        return addslashes(trim($_POST[$par]));
    }
}
?>

Yukarıda iki parametreli bir fonksiyon tanımladık. Bu fonksiyonun ilk parametresi kullanıcıdan aldığımız veri, ikinci parametresi ise true ya da false. Burada true, false kullanmadaki amaç eğer ikinci parametre true gönderilmiş ise birinci parametre içindeki HTML için özel anlam ifade eden karakterleri imlemek için kullanılır. 

Örneğin bloğunuzda bir içerik hazırladınız ve içerikte herhangi bir sayfaya link verdiğinizi düşünelim.  

<a href="https://www.mustafaazak.com/php-programlama-php-fonksiyonlar/">Php Fonksiyonlar </a>

Bu içeriği fonksiyona true parametresi ile birlikte gönderdiğinizde HTML için özel anlam ifade eden karakterle temizlenecektir ve bu link sayfada istediğiniz gibi görüntülenmeyecektir. Normalde sadece Php Fonksiyonlar şeklinde bir bağlantı metni gözükmesi gerekirken aşağıdaki gibi görünecektir.

<a href=\"https://www.mustafaazak.com/php-programlama-php-fonksiyonlar/\">Php Fonksiyonlar </a>

Sayfanın kaynak kodlarını incelediğinizde ise HTML için anlam ifade eden karakterlerin imlemelere dönüştürüldüğünü göreceksiniz.

&lt;a href=\&quot;https://www.mustafaazak.com/php-programlama-php-fonksiyonlar/\&quot;&gt;Php Fonksiyonlar &lt;/a&gt;gt;

Aşağıdaki listede html için özel anlam ifade eden karakterlerin dönüştürüldüğü imlemeleri inceleyebilirsiniz.

  • ‘&’ (ampersand) ‘&amp;’ haline gelir.
  • ‘”‘ (çift tırnak)  ‘&quot;’ haline gelir.
  • ”’ (tek tırnak)  ‘&#039;’ haline gelir.
  • ‘<‘ (küçüktür) ‘&lt;’ haline gelir
  • ‘>’ (büyüktür) ‘&gt;’ haline gelir

Fonksiyonun kullanım şekli

Formdan post ile gönderilen veriyi filtreler ve geri döndürür. Aşağıdaki gibi basit bir kullanımı var.

<?php 
if($_POST){
$baslik = p("baslik",true);
$icerik = p("icerik");
}
?>

GET Fonksiyonu

Get fonksiyonunun kullanımı da tıpkı POST fonksiyonu gibi basit. GET fonksiyonu biraz daha farklı. Tek parametre ile direk veri gönderiyoruz. 

<?php
function g($par)
{
    return strip_tags(trim(addslashes($_GET[$par])));
}
?>

Tıpkı post fonksiyonundaki gibi tırnak, boşluk ve html etiketleri temizleniyor. Veri en sade şekilde geri döndürülüyor.

<?php 
if($_GET){
$page = g("page");
}
?>

Bu iki basit fonksiyon ile kod yazımını hızlandırıyoruz, gereksiz tekrarı önlüyoruz ve basitte olsa güvenlik önlemi almış oluyoruz.

Php Güvenlik Fonksiyonu

Kullanmış olduğum bir fonksiyon daha var. Bu fonksiyonu GET için kullanıyorum ancak istediğiniz her yerde kullanılabilir. Kullanım alanı size kalmış.

<?php 
function guvenlik($q)
{
    $q = trim($q);
    $q = str_replace("script", "", $q);
    $q = str_replace("`", "", $q);
    $q = str_replace("'", "'", $q);
    $q = str_replace("-", "-", $q);
    $q = str_replace("&", "", $q);
    $q = str_replace("%", "", $q);
    $q = str_replace("<", "", $q);
    $q = str_replace(">", "", $q);
    $q = trim($q);
    return $q;
}
?>

Oldukça basit bir fonksiyon belirlediğimiz karakterleri yine belirlediğimiz karakter ile değiştiriyor.

<?php 
guvenlik($parametre);
?>

Kullanımı yukardaki gibi oldukça basittir. Tek bir parametre gönderiyoruz. Gönderilen veri içinde belirlediğimiz karakterler var ise değiştirilip tekrar geri gönderiliyor. Bir çeşit güvenlik önlemi diyebiliriz. 

Yukarıdaki fonksiyonlar tabi ki tamamen güvenlik sağlamıyor. Bunlar basit önlemler en azından alınması gereken temel önlemler diyebiliriz. Fonksiyonlarla ile yapılacaklar hayal gücümüz ile sınırlıdır. Php’yi daha yeni öğrenmeye başladığımda hiç böyle bir şey aklıma gelmemişti.

Tek bir yerden öğrenmek yerine birden fazla yerden öğrenmek her zaman iyidir. Belki konular aynı olabilir, başlıklar aynı olabilir ama ufak bir ayrıntı daha önce görmediğiniz şeyi fark etmenizi sağlar.

Bazen bir film çok hoşunuza gider defalarca izlersiniz ve her izlediğinizde farklı bir detay görürsünüz. Programlama da böyledir her incelediğinizde her araştırdığınızda farklı bir şey öğrenirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir