PHP ile form verileri gönderirken basit güvenlik önlemleri

İncelediğim kadarıyla son yıllarda oldukça sıkı ve neredeyse eksiksiz veritabanı sınıfları yazılmış. Basit bir giriş için bile bu sınıfların ağır geldiği durumlar oluşabiliyor. Bende bu sorunum için kendime basit/minik bir çalışma yaptım. Gelecekte ihtiyaç duyma ihtimalime karşı burada not alarak paylaşmak istedim. Tabi unutulmamalıdır ki güvenlik ciddi bir şekilde ele alınması gereken önemli bir geliştirme adımıdır. Asla gözardı edilmemeli, asla basit bir geçiştirme ile ele alınmamalıdır. Yazımın sonunda bu anlamda bir kaç önerim daha olacak.

Öncelikle basit bir giriş arayüzü hazırladım. Inputlarımızın isimleri email ve pass

security-form

 

Bu formumuzda üretilen veriyi post ile gönderdiğimiz dosyamızın adı gelen.php  . Bildiğiniz gibi geliştiricilerin çoğu php dosyalarının sonunda php etiketini kapatırlar. Bu bazen nedenini anlamıdığımız boşlukların oluşmasına sebebiyet verebiliyor. Bu sebeple bu PHP dökümanlarınızın etiketlerini kapatmayın, bizde kapatmıyoruz. Örnek verelim;

Eski anlayış;

<?php
/**
 * User: hmustak
 * Date: 12.09.2016
 */

// Eski Anlayış
function hata($mesaj){
    return $mesaj;
}

?>

Yeni anlayış;

<?php
/**
 * User: hmustak
 * Date: 12.09.2016
 */

// Yeni Anlayış
function hata($mesaj){
    return $mesaj;
}

Gelen verileri işlediğimiz gelen.php dosyası ile ilgili bir detaya daha dikkat ediyor olacağız; direkt konumuz değil ama gelen verileri veritabanımız üzerinde sorgulayacak ve çekeceğimiz için PHP grubu, kendi sitelerinde de duyurdukları üzere PHP5.5’den itibaren mysql_  ile başlayan etiketleri kaldırdı ve  destek vermiyor olacak. Geliştirmelerinizde buna dikkat etmenizi önereceğim.

deprecated

Yazıda da gördüğünüz üzere bunun için kullanılmasını önerdiği alternatifler: PDO (Php Data Objects), Mysqli (Mysql Improved Extension). Yazımızın konusu basit güvenlik olduğu için şimdi değil ama müsait bir zamanda özellikle PDO konusunda bir şeyler yazmak istiyorum.

Sonunda geldik gelen.php dosyamıza;

// Post ile gelen basit veri güvenliğini sağlayan fonksiyon
function guvenlik($gelen){
    $giden = addslashes($gelen);
    $giden = htmlspecialchars($giden);
    $giden = strip_tags($giden);
    $giden = htmlentities($giden);
    return $giden;
}


// MySQL Bağlantı
    $mysql_connection = new mysqli($mysql_host, $mysql_user, $mysql_pass, $mysql_db);

// Gelen Bilgiler
    $gelen_email = mysqli_real_escape_string($mysql_connection, guvenlik($_POST['email']));
    $gelen_pass  = mysqli_real_escape_string($mysql_connection, guvenlik($_POST['pass']));

echo $gelen_email . "-" .  $gelen_pass ;

Gördüğünüz gibi gayet basit ama etkili.

  • POST ile gelenleri önce guvenlik() fonksiyonumuza gönderiyoruz
    • Güvenlik fonksiyonumuz altında sırasıyla addslashes, htmlspecialchars, strip_tags, htmlentities alt fonksiyonlarından geçiyor
  • Sonra mysqli_real_escape_string fonksiyonumuza mysql bağlantımızla tekrar sokup, son halini veriyoruz.

Hakan Müştak @2016/08

Kaynakça;
http://php.net/manual/tr/function.addslashes.php
http://php.net/manual/tr/function.htmlspecialchars.php
http://php.net/manual/tr/function.strip-tags.php
http://php.net/manual/tr/function.htmlentities.php
http://php.net/manual/en/mysqli.real-escape-string.php
http://php.net/manual/tr/class.pdo.php
http://php.net/manual/en/class.mysqli.php

 


Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

question razz sad evil exclaim smile redface biggrin surprised eek confused cool lol mad twisted rolleyes wink idea arrow neutral cry mrgreen

*

Captcha Kontrolü * Zaman aşımı, sayfayı tekrar yükleyin


Top