PHP, Apache Url Rewriting ve HTTP Session kullanarak istenilen dosyalara erişimi kısıtlamak

Web sunucunuzda bulunan bazı dosyalara erişimi kısıtlamak için Url Rewriting Engine kullanmak kolaylık açısından daha iyi bir seçim olabilir. Önce basit bir Url Rewriting kuralı yazacağız, daha sonra HTTP Session bilgilerine bakarak 'flv' uzantılı dosyaları belli kullanıcıların indirebileceği hale getireceğiz.

Normalde web sunucusuna koyulan tüm dosyalar direk olarak adres satırına dosyanın URL adresini yazıp indirebiliriz. Fakat web sunucusunda bulunan her hangi tipte bir dosyanın bu şekilde direk olarak indirilmesini Url Rewriting Engine ve HTPP Session kullanarak kısıtlayabiliriz. Hemen detaylara geçelim :

Örneğimizde 'flv' yani flash tipi video dosyalarına erişimi sadece 'premium' rolüne sahip kullanıcıların indirebileceği şekilde kısıtlamak istediğimizi düşünelim ( mesela : www.example.com/file.flv ) .

Örneğe başlamadan önce Url Rewriting Engine'i açmış ve Url Rewriting kurallarını biraz bilmeniz gerek. Bunu Apache yerel sunucunuzda (localhost) nasıl yapacağını bilmiyorsanız ilgili yazıma buradan bakabilirsiniz.

Adım 1) URL Rewriting Kuralı ile flv uzantılı dosyalara erişimi kontrol etmek

Apache sunucusu ve PHP ayarlarını kurmuş olduğunu varsayarak işe başlayalım. Önce Apache sunucunuzda bulunan 'htdocs' (ya da 'www_root') klasörü içinde .htaccess uzantılı bir dosya yaratın ve aşağıdaki URL Rewriting kuralını ekleyin. .htaccess dosyasının içeriği :

# URL Rewriting motorunu aktif hale getiriyoruz.
RewriteEngine On 
# flv uzantılı dosyalara erişilmek istenildiğinde flv.php isimli dosyayı çalıştırıyoruz. Aynı zamanda dosyanın ismini URL parametresi olarak ekliyoruz.
RewriteRule ^/?(.*).flv flv.php?fileName=$1 [NC,L]
Yukarıdaki Url Rewriting kuralımızı yazıp dosyayı kaydedikten sonra flv uzantılı dosyayı yerel sunucumuzda dosya indirmeye çalıştığımızda kuralımız aşağıdaki gibi çalışmış olacak : url rewrite rule örnek, dosya erisimini kısıtlamak

Adım 2) HTTP Session ile kullanıcı rolüne göre erişimi kısıtlamak

Örneğimizde gördüğünüz gibi 'flv' uzantılı dosyanın ismini flv.php adlı dosyamıza yolluyoruz. Bu yüzden .htaccess dosyamızın bulunduğu yere flv.php adlı bir dosya yaratalım ve aşağıdaki PHP kodunu ekleyelim:

<?php
// Kullanıcı bilgilerini session üzerinden taşıyacağımız için sessin_start() 
// fonksiyonunu  kodun en başına ekliyoruz.
session_start();

// Örnek olması amacıyla session 'userRole' değişkenine üstün kullanıcı rolü anlamına gelen 'premium' değerini veriyoruz.
// Normalde session değişkenleri kullanıcı siteye Login olduğu zaman oluşturulur
// ama burada sadece örnek olması amacıyla session bilgilerini burada oluşturuyoruz.
$_SESSION['userName']='ali';
$_SESSION['userRole']='premium';

// İndirilecek dosyanın adını get metoduyla alıyoruz.
// Daha önce yazdığımız Url Rewrite engine kuralımız çalışacağı için 
// fileName değişkenine dosyanın ismi otomatik olarak atanmış olacak.
$fileName= $_GET['fileName'];

// Dosyanın uzantısını eklioyuruz.
$filePath=$fileName.'.flv';

// Session 'userRole' değişkenini 'premium' ise dosya indirebilsin.
if  ($_SESSION['userRole']=='premium')

{
    // Dosyanın varlğını chek ediyoruz.
    if (file_exists($filePath))
    {
        // Dosyayı açıyoruz
        if ($fh = fopen($filePath, 'r'))
        
        {
            // Dosyayı içeriğini okuyoruz.
            $data = fread($fh, filesize($filePath));
            // Download edebilmesi için dosya içerik tipini 
            // HTTP Header'a ekliyoruz 
            header("Content-type: video/flv;\n");
            // Dosyayı alıcıya yolluyoruz.
            echo $data;    
        }
        // Açtığımız dosyayı kapatıyoruz.
        fclose($fh);
    }
    else
        echo "Dosya Bulunamadi !"; // Dosya bulunadı ise kullanıcıya bunu gösteriyoruz.
}
else
    echo "Dosyayi indirme yetkiniz yok !"; // Eğer kullanıcının rolü 'premium' değilse dosya indirme yetkiniz yok diye kullanıcıya bunu gösteriyoruz.
?>
Bundan sonra web sunucunuzun ana klasöründe aşağıdaki dosyaların oluşmuş olması gerek:
  • .htaccess
  • flv.php
Yaptığımız örneği test etmek için demo.flv adında bir dosya yaratalım (notepad -> save as seçeneği ile bunu yababilirsiniz). Artık apache web sunucumuzu start edip test edebiliriz. Uygulamaya ait örnek dosyaları buradan indirebilirsiniz.

Örneğimizde böylece flv uzantılı dosyalara erişimi kısıtlamış olduk. Siz istediğiniz gibi bunu değiştirebilir ve bu mantığı kullanarak dosyaları belli kullanıcılara göre düzenleyebilirsiniz.
yazan Zülküf Küçüközer tarih   18th April 2010
primary key words  Url rewriting | Dosya | Web sunucusu | Flv okunma  32029
secondary key words  Erişim | Http session | Kullanıcı | Php
writing mirza writing 12th July 2011
hocam bunu,swf uzantılı animasyonların indirilmesini engellemek için nasıl yaparız_? yardımcı olursanız çok sevinirim