Php Güvenlik – 3

Session (Oturum) Güvenliği

php güvenlikSession içerisinde çok önemli bilgiler tutulduğundan session güvenlik açısından çok önemlidir. Session verilerinin sunucu tarafında tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür.

SSL kullanımını etkinleştirmek server ve client arasındaki veri akışının daha güvenli bir biçimde sağlanması açısından önemlidir. SSL sayesinde bütün HTTP istek ve yanıtları korumalı bir şekilde aktarılır.

Güvenlik kalkanınızı biraz daha güçlendirmek isterseniz session içerisine yazılacak verileri şifreleyerek yazmayı tercih edebilirsiniz. Böylece session içerisindeki veriler şifrelemeyi çözecek anahtar olmadan okunamaz. Şifreleme işi session_set_save_handler( )  fonksiyonu yardımıyla yapılabilir.

Session değişkenini her seferinde yeniden üretmek de saldırganın işini zorlaştıracaktır

<?php
session_start();
if (!isset($_SESSION['initiated'])) {
   session_regenerate_id();
   $_SESSION['initiated'] = TRUE;
}
?>

Sitemizde bir belgeden aldığımız verileri arayüzde göstereceksek file_get_contents‘ten gelen veriler filtrelenmelidir. Bunu aşağıdaki gibi yapabiliriz:

<?php
$clean = array();
$html = array();
/* Filter Input ($_GET['filename']) */
$contents = file_get_contents($clean['filename']);
/* Filter Input ($contents) */
$html['contents'] = htmlentities($clean['contents'], ENT_QUOTES, 'UTF-8');
echo $html['contents'];
?>

Login Formlarının Güvenliği

Sisteminize kayıtlı üyenin kullanıcı adı, şifre bilgilerini yazarak sisteme giriş yapacağı formların güvenliğinin sağlanması çok önemli bir güvenlik konusudur. Sisteme giriş yapmak isteyen bir saldırgan sürekli farklı şifreler deneyen bir bot tasarlayarak sisteminize giriş yapmaya çalışacaktır. Bu tarz botları engellemek amacıyla çeşitli güvenlik önlermleri alınabilir. Bunlardan bir tanesi sisteme giriş formunuzda captcha kullanmaktır. Bu çözüm başarılı olsa da kullanıcıları sıkan bir yöntem olduğundan bu yöntemi tercih etmek istemeyebilirsiniz. Alacağınız bir diğer güvenlik önlemi ise bir kişinin art arda belli bir zaman aralığında yanlış şifre denemesi yaptığını tespit ederek onun belli bir süre sisteme giriş yapmasını engellemektir. Bu süre 15 dk olarak belirlenebilir. Örneğin 3 kere yanlış şlifre girilirse bir daha deneme yapmak için 15 dk beklemesi gerekecek. Bu tarz bir yöntem saldırganın işini oldukça zorlaştıracaktır.

Http isteklerinin saldırgan tarafından dinlenmesi ihtimali göz önüne alınarak bu isteklerin güvenli bir şekilde gidip gelmesi amacıyla https protokolü kullanılabilir. Bu şekilde server ve client arasındaki veri akışı bir saldırgan tarafından ele geçirilse bile içeriğin ne olduğu kolay kolay çözülemeyecektir.

Paylaşımlı Hosting Kullanımından Doğabilecek Güvenlik Açıkları

Paylaşımlı hosting üzerindeki başka bir sitenin sahibi olan geliştirici sizin kaynak kodlarınızı okuyabilecek bir script geliştirebilir. Aşağıdaki gibi bir kodda file isminmi belirtmek bu işi gerçerkleştirmek için yeterlidir.

<?php
header('Content-Type: text/plain');
readfile($_GET['file']);
?>

Bu güvenlik açığını engellemek amacıyla alacağınız önemli önlemlerden bir tanesi de çok önemli bilgileri mümkün olduğunca veritabanında tutmaya çalışmaktır. Ancak bu da her zaman çözüm değildir çünkü veritabanı erişim bilgilerini yine de kaynak kodlarımız içerisinde tutmamız gerekecek. Bu soruna da şöyle bir çözüm getirebiliriz. Veritabanı erişim bilgilerini sadece root erişimi olacak şekilde ayarlarız.

SetEnv DB_USER "myuser"
SetEnv DB_PASS "mypass"

Bu değişkenlere kod içerisinde şu şekilde erişebiliriz:

<?php
$db_user = $_SERVER['DB_USER'];
$db_pass = $_SERVER['DB_PASS'];
$db_host = 'localhost';
$db = mysql_connect($db_host, $db_user, $db_pass);
?>

Önemli verileriniz $_SERVER değişkeninde olduğundan bu bilgileri kullanıcya sunabilecek phpinfo() fonksiyonunun kullanıcılara açık bir yerde kullanılmasından kaçının.

Session verilerinizin de güvenliği paylaşımlı hosting kullanımlarında tehlike altındadır. Session bilgileri tmp dosyası altında tutulur ve bu dosya bütün apache kullanıcılarının yazma izniyle erişebileceği bir yerdir.  Kötü niyetli bir kişi session verilerinin yazacağı bir script yardımıyla okuyabilir. Bu script aşağıdaki gibi olabilir.

<?php
header('Content-Type: text/plain');
session_start();
$path = ini_get('session.save_path');
$handle = dir($path);
while ($filename = $handle->read()) {
   if (substr($filename, 0, 5) == 'sess_') {
      $data = file_get_contents("$path/$filename");
      if (!empty($data)) {
         session_decode($data);
         $session = $_SESSION;
         $_SESSION = array();
         echo "Session [" . substr($filename, 5) . "]\n";
         print_r($session);
         echo "\n--\n\n";
      }
   }
}
?>

Böyle bir güvenlik açığını kapatmanın yolu session bilgilerini veritabanında tutmaktır.

Php safe mode

Bu mod açık ise bir script çalıştırıldığında o scripti ç.alıştıran kullanıcı ile erişilmeye çalışılan kaynak sahibinin aynı kullanıcı olup olmadığı kontrol edilir. Böylece başka bir kullanıcının sizin dosyalarınıza erişimi engellenmiş olur. Safe Mode php ile yazılmış scriptler için güvenlik sağlarken diğer dillerde yazılmış olan scriptler açısından bir şey ifade etmez. Aşağıdaki gibi bir CGI scripti buna örnektir.

#!/bin/bash
echo "Content-Type: text/plain"
echo ""
cat /home/victim/inc/db.inc

Host tarafından desteklenen Perl, Phyton gibi dillerde yazılacak scriptlerin hiçbiri safe mode ayarını dikkate almayacaktır.

Safe modun bir diğer zayıf tarafı ise scriptlerin kendi içerisinde yeni script yaratabilir ve bu yaratılan yeni scriptin sahibi web server olacaktır. Web server bütün dosyalara erişim hakkına sahip olduğundan safe modun burada herhangi güvenlik etkisi kalmayacaktır.

Kaynak : Php Essential Security- O’Reilly

8 Comments

    Php Guvenlik – 3 « Lé Blog

    […] tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür… Devamı için : Php Guvenlik – 3 Share :FacebookTwitterStumbleUponLinkedInLike this:LikeBe the first to like […]

    Php Guvenlik – 3 | Kara Kule

    […] tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür… Devamı için : Php Guvenlik – 3 Share this:TwitterFacebookBunu beğen:BeğenBunu beğenen ilk kişi olun. By ahmet orsorlu […]

    Php Guvenlik – 3 « Musa Usta'nın Yeri

    […] tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür… Devamı için : Php Guvenlik – 3 Share this:TwitterFacebookBunu beğen:BeğenBunu beğenen ilk kişi olun.   Yorum […]

    Php Guvenlik – 3 | Boğaç Aslanyürek

    […] tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür… Devamı için : Php Guvenlik – 3 This entry was posted in Professional and tagged php güvenlik, php security by bogacaslan. […]

    Php Guvenlik – 3 « Murat SAÇ

    […] tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür… Devamı için : Php Guvenlik – 3 Share this:TwitterFacebookBunu beğen:BeğenBunu beğenen ilk kişi olun. […]

    Php Guvenlik – 3 « Gökhan Tunçkale | Blog

    […] tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür… Devamı için : Php Guvenlik – 3 ShareFacebookTwitterStumbleUponMoreTumblrRedditLinkedInDiggEmailPrintBunu beğen:BeğenBunu […]

    Php Guvenlik – 3 | yusufozkay

    […] tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür… Devamı için : Php Guvenlik – 3 Share this:TwitterFacebookBunu beğen:BeğenBunu beğenen ilk kişi olun. Bu yazı Uncategorized […]

    Php Guvenlik – 3 « Anil's Blog

    […] tutulması güvenlik açısından içimizi rahatlatan en önemli faktördür… Devamı için : Php Guvenlik – 3 Bunu beğen:BeğenBunu beğenen ilk kişi […]

Php Guvenlik – 3 | Boğaç Aslanyürek için bir cevap yazın Cevabı iptal et