Popüler Aramalar:  TLS Nedir?  MyBB SSL Ayarları  MyBB 1.8 Linkleri Gizleme Eklentisi  Wordpress LiteSpeed Cache Ayarları  Wordpress Eklentisiz Breadcrumb  Yandex Webmaster
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.

 Yazı Bağlantısını Kopyala & Paylaş

Benzer Yazılar

  • PHP Out of Memory Hatası Nasıl Çözülür?

    PHP Out of Memory Hatası Nasıl Çözülür?

    Son günlerde Wordpress ve Wordpress eklentilerine gelen güncellemeler sonucunda kişisel blog sayfamın hata kayıtları günlüğünde çok fazla bu hatayı görmemden ötürü araştırma yaptım ve araştırmam sonucunda bulduğum çözümü uyguladım ve sorunum ortadan kalktı. FTP kök dizininde eğer sitenizde bir teknik sorun var ise bunun kayıtlarının tutulduğu bir error_log dosyası mevcuttur.…
  • WordPress’te Birden Fazla Yazı Kısaltma Fonksiyonu Nasıl Yapılır?

    WordPress’te Birden Fazla Yazı Kısaltma Fonksiyonu Nasıl Yapılır?

    Wordpress'te varsayılan olarak blog yazıları 55 kelime kısaltılmakta. Wordpress'in yazı uzunluğu filtreleme fonksiyonu kullanılarak bu varsayılan değeri değiştirebiliyoruz ve bu değiştirdiğimiz de sadece bir yerde kullanabiliyoruz, peki ya birden fazla alanda farklı kelime uzunlukları kullanmak istiyorsak? Birden fazla yazı türüne sahip bir internet sitesi geliştiriyorsanız, her farklı alan için farklı…
  • Debian 9’a MariaDB Nasıl Kurulur?

    Debian 9’a MariaDB Nasıl Kurulur?

    Bu blog yazımda dünyanın en çok tercih edilen, ücretsiz ve açık kaynak kodlu oldukça stabil, hızlı ve çeşitli modüller ile desteklenebilen veri tabanı sunucusu olan MariaDB'yi Debian 9 işletim sistemine nasıl kuracağınızı göstereceğim. MariaDB, oldukça hızlı, kararlı ve ölçeklenebilir bir MySQL veritabanı sunucusunun geliştirilmiş,eskiye dönük yazılımlarla tam uyumlu çalışabilen, drop-in…
  • VestaCP Varsayılan Portu (8083) Nasıl Değiştirilir?

    VestaCP Varsayılan Portu (8083) Nasıl Değiştirilir?

    VestaCP varsayılan olarak 8083 portu üzerinde çalışmaktadır. Bazı güvenlik endişesi durumlarında bu portun değiştirilmesi önerilir. Çok kolay bir şekilde birkaç adım ile bu portu kendinize göre düzenleyebilirsiniz. Seçeceğiniz port numarası rastgele sayılardan ibaret değildir. Örneğin cPanel 2082 ve 2083, 2087 portlarını kullanılır bu portlar Dünya genelinde tüm teknolojik cihaz ve…
Apache URL Rewriting ve HTTP Session Kullanarak İstenilen Dosyaya Erişimi Kısıtlama için Yorum'da Bulun

Bir Cevap Yaz

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

 Lütfen, en az 15 karakterli bir yorum belirtiniz.

 Lütfen,isminizi belirtiniz.
 Lütfen, kullanmakta olduğunuz bir e-mail adresi giriniz.
 Yukarıda ki alanı işaretlemeniz zorunludur.Aksi takdirde yorumunuz gönderilemeyecektir.