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

ShamaN

Yönetici
Administrator
Katılım
31 Ara 2017
Mesajlar
171
#1
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.