Apache URL Rewriting ve HTTP Session Kullanarak İstenilen Dosyaya Erişimi Kısıtlama

Apache URL Rewriting ve HTTP Session Kullanarak İstenilen Dosyaya Erişimi Kısıtlama

Apache, dünya genelinde birçok web sunucusunun temelini oluşturuyor. Bundan dolayı en yaygın kullanılan sunucu işlemcisidir ancak bu işlemci günümüz ihtiyaçlarını karşılayamadığı için birçok modül ile bu ihtiyaçları karşılamaya çalışıyor. Bugünkü yazımda ise bu modüllerden biri olan mod_rewrite modülünden faydalanacağız.

Gel gelelim asıl konumuza,çok fazla dosya paylaşan, paylaştığınız bu dosyaları çok fazla kullanıcı tarafından indirilen bir internet sitesine sahipsiniz. Bir süre sonra bu kadar fazla kullanıcı tarafından dosyaların hiçbir kontrole tabii olmadan indirmeleri sunucunuza hem yük bindirdiği gibi hem de ciddi bir güvenlik zaafiyeti de oluşturacaktır.

Bir de bütün bu yük yetmezmiş gibi bir de sizden beslenen bazı çakallar ortaya çıkacak ve  sizin paylaştığınız dosyayı kendi sunucusuna alıp,sunmak yerine sizin sunucunuz üzerinizden paylaşmaya başlayacak o zaman sunucunuza haddinden fazla bir yük bindirilmiş olacak. Bunun önüne geçebilmek için oldukça basit bir yöntemden bahsedeceğim bu yazımda.

Apache URL Rewriting ve HTTP Session Kullanarak İstenilen Dosyaya Erişimi Kısıtlama

Sunucunuzda ki sizin belirlediğiniz uzantıya sahip ve yine sizin belirleyeceğiniz yetkilere sahip kullanıcılar tarafından bu dosyaların indirilmesini sağlamak istiyorsanız hem php hem de apache’nin nimetlerinden faydalanmanız gerekiyor. İnternet sitenizde ki bir dosyayı doğrudan internet tarayıcısının adres satırına yazıp, çalıştırdığımızda hiçbir kısıtlama olmadan o dosyayı indirebiliyoruz.

Bazı çakallar kendi sunucusuna yüklemek yerine sizden alıp, sizin sunucunuz üzerinden indirilmesini sağlayabiliyorlar bu durum haliyle sizin sunucunuza ekstra bir yük bindiriyor. Bunun önüne geçebilmek ve sadece sizin belirlediğiniz yetkilere sahip kullanıcıların indirmesini sağlamak istiyorsanız ilk önce Apache’nin URL Rewriting yani mod_rewrite özelliğini kullanacağız.

Bu bahsettiğim özelliği birçoğunuz biliyorsunuzdur diye tahmin ediyorum bilmiyorsanız .htaccess dediğim de ha tamam onu biliyoruz canım diyeceksiniz. Yapacağımız ufak bir işlem ile belirleyeceğimiz uzantıya sahip dosyaya gelen istekleri yine bizim belirleyeceğimiz bir php dosyasına yönlendireceğiz ve yönlendirdiğimiz php dosyasında da yine bizim belirleyeceğimiz yetkilere sahip kullanıcılar indirebilecekler o dosyayı bunu da HTTP Session özelliğinden faydalanarak yapacağız.

1.Adım: URL Rewriting ile Gelen İstekleri PHP Dosyasına Gönderme (.htacces ile)

İstediğimiz dosyanın uzantısı mp3 olsun ve bu dosyaya doğrudan gelen indirme isteklerini, mod_rewrite özelliği ile yine bizim belirleyeceğimiz php dosyasına gönderelim daha sonra o php dosyasında http session kullanarak izin kontrolü yapıp indirme işlemi yaptırtacağız.

Aşağıda ki kodu .htaccess dosyanız var ise uygun bir yere ekleyin yok ise sitenizin ana dizinine bir adet oluşturun.

# URL Rewriting motorunu aktif hale getiriyoruz.
RewriteEngine On 
# mp3 uzantılı dosyalara erişilmek istenildiğinde kontrolmp4.php isimli dosyayı çalıştırıyoruz. Aynı zamanda çağrılan dosyanın ismini URL parametresi olarak ekliyoruz.
RewriteRule ^/?(.*).mp3 kontrolmp3.php?fileName=$1 [NC,L]

2.Adım: .htaccess ile Gelen İsteği PHP HTTP Session İle Kontrol Etme ve Yetkilendirme

.htaccess dosyanın bulunduğu dizine kontrolmp3.php adında bir php dosyası oluşturuyoruz ve bu oluşturduğumuz dosya içerisine aşağıda ki kodları ekliyoruz ve gerekli alanları kendimize göre düzenliyoruz.

<?php
//Oturum açma fonksiyonu olan session_start fonksiyonunu kodunu en başına ekliyoruz.
//Böylelikle tarayıcıdan bir kullanıcı oturum açmış oluyoruz.
session_start();
// Örnek olması amacıyla session 'userRole' değişkenine üstün kullanıcı rolü anlamına gelen 'vip' değerini veriyoruz.
// Normalde session değişkenleri kullanıcı siteye giriş yaptığı zaman oluşturulur.
// Ancak bu örneğimizde sizin anlamanız amacıyla session bilgilerini burada oluşturuyoruz.
$_SESSION['userName']='huseyin';
$_SESSION['userRole']='vip';
// İndirilecek dosyanın adını get metoduyla alıyoruz.
// Daha önce yazdığımız Url Rewriting 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ı bu kısıma ekliyoruz.
$filePath=$fileName.'.mp3';
// Session 'userRole' değişkenini 'vip' ise dosya indirebilsin.
if  ($_SESSION['userRole']=='vip')
{
// Dosyanın var olup olmadığını kontrol ediyoruz.
if (file_exists($filePath))
{
// Dosya var ise açıyoruz.
if ($fh = fopen($filePath, 'r'))
{
// Açılan dosyanın içeriğini okuyoruz.
$data = fread($fh, filesize($filePath));
// Kullanıcı dosyayı download edebilmesi için dosya içerik tipini  HTTP Header'a ekliyoruz 
header("Content-type: audio/mp3;\n");
// Dosyayı kullanıcıya yolluyoruz.
echo $data;    
}
// Açtığımız dosyayı kapatıyoruz.
fclose($fh);
}
else
echo "Dosya Bulunamadi !"; // Dosya yok ise kullanıcıya bunu gösteriyoruz.
}
else
echo "Dosyayi indirme yetkiniz yok !"; // Eğer kullanıcının rolü 'vip' değilse dosya indirme yetkiniz yok diye kullanıcıya bunu gösteriyoruz.
?>

Yazımda yapmış olduğum örnek ile mp3 uzantılı dosyalara yetkisi olmayan kullanıcılara  erişimi kısıtlamış olduk. Siz ihtiyaçlarınıza göre bu örneği  değiştirebilir ve bu mantığı kullanarak farklı dosyalarınızı belli kullanıcılara göre erişim sınırlaması yapabilirsiniz.

Kodları geliştirmek ve daha da spesifik hale getirmek sizin elinizde, ben basit bir örnek ile olayı anlatmaya çalıştım umarım işinize yarar.

Bir Cevap Yazın

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