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

  • 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…
  • Centos 7’de VestaCP’yi PHP 7.2 Sürümüne Yükseltme

    Centos 7’de VestaCP’yi PHP 7.2 Sürümüne Yükseltme

    VestaCP, açık kaynaklı, kolay kurulabilen, yönetilebilen ve Türkçe dil desteği bulunan ücretsiz bir sunucu yönetim panelidir. Basit ve temiz bir arayüze sahip olan VestaCP bilinen birçok işletim sisteminde stabil bir şekilde çalışmaktadır. VestaCP, RHEL 5, RHEL 6, RHEL 7 CentOS 5, CentOS 6, CentOS 7, Debian 6, Debian 7, Debian…
  • VestaCP PHP 5’den PHP 7’ye Nasıl Yükseltilir?

    VestaCP PHP 5’den PHP 7’ye Nasıl Yükseltilir?

    VestaCP ücretsiz sunucu yönetim panelleri arasında kullanımı,kurulumu kolay ve Türkçe dil desteği ile öne çıkmaktadır. Daha önce ki blog yazılarımda VestaCP sunucu yönetim panelini farklı şekillerde, farklı uygulamalarla nasıl kurabileceğinizi anlatmıştım. İlgili yazılara aşağıda ki bağlantıları kullanarak ulaşabilirsiniz.  İlgini Çekebilir VestaCP + Nginx (Reverse Proxy) Kurulumu CentOS 6 Sunucuya VestaCP…
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.