Dosya uzantısı kullanmaksızın sayfa adresleme

Oluşturulan web sayfalarının adreslerinde dosya uzantıları (.php, .jsp vb) kullanılmadan web sayfalarına adres vermenin nasıl yapılabileceği, bu yazıda anlatılmaktadır. Örnek adres:


Web sayfaları için adres oluştururken tercih edilen, süregelen o geleneksel yöntem aşağıdaki gibidir:


Bir kod sayfası oluşturulur ve sayfaya URL'den parametre gönderilir. Bu durumda ziyaretçi, yukarıdaki adresi analiz ederek web sitesinin altyapısı hakkında aşağıdaki bilgileri elde edebilir.



  • Sitenin dizin yapısı: Kök dizininde "haber.php" isminde bir kod dosyası var.

  • Kullanılan teknoloji: "haber.php" yani PHP toknolojisi kullanılıyor.

  • Parametreler: Sayfa, "HaberId" isminde bir parametre alıyor.

  • vs.


Bu şekildeki adreslemelerin, bazı sıkıntıları vardır:



  • Karmaşa: Böyle adreslerin, ziyaretçiler tarafından hatırlanması zordur. Başka bir sıkıntısı ise; basılı yayım organlarında (gazete, dergi vb), "?" ve ".php" içeren uzun adresler kullanıldığında, ziyaretçilerin gazeteden okuyup tarayıcılarına tuşlaması çok sıkıntılı olmaktadır. Oysa; vukuf.com/makale/23 hatırlaması ve tuşlaması kolay bir adrestir.

  • Güvenlik: Sisteme saldıracak olan muhtemel saldırgan, saldırılarını saltyapıya göre şekillendirecektir. Altyapı hakkında ne kadar az bilgi bilirse, işi o kadar zorlaşır.

  • Esneklik: PHP teknolojisine bağımlı olunur. PHP'den örneğin JSP'ye geçiş yapılacağı zaman, sistemdeki tüm bağlantıların adresleri PHP'den JSP dönüştürülmek zorunda kalacaktır: haber.php --> haber.jsp

  • İzlenim: Bazı projelerde, hangi teknolojinin kullanıldığı özellikle gizlenmek istenebilmektedir. Örneğin; ColdFusion satan bir şirket, kendi internet sitesinde PHP kullanmış olabilir. Teknolojisini gizlemek istemesi çok normal!

  • vs.


Sayfaların adreslerindeki tüm bu sırlar gizlenmelidir. En büyük internet sitelerinde bu zaten yapılmaktadır. Eğer aşağıdaki gibi bir adresleme kullanılırsa sırlar gizlenmiş olur:



Görüldüğü üzere, sayfa adresinde kod dosyasının uzantısı (.php) yoktur. Dizin yapısı da görülmemektedir. vs


Bu yazıda, bu yöntemin kullanılabilmesi için sistemde hangi ayarların ve değişikliklerin yapılması gerektiği anlatılmaktadır.


Uygulama sunucusunda (PHP, ColdFusion, JSP vb) herhangi bir değişiklik yapılmasına gerek yoktur. Tüm püf noktası HTTP sunucunda (Apache, IIS vb) gizlidir. Yöntem ise şöyledir; web sunucusu, tarayıcının gönderdiği sayfa adresini, uygulama sunucusuna değiştirdikten sonra gönderir. Böylece, kodlar süregelen /haber.php yöntemiyle hazırlanırken, adres satırından ulaşım değişmiş olur:



Dizin yapısında bir değişiklik yoktur. Süregelen yöntem devam eder. Kod dosyası, kök dizindedir:



Dosyanın içeriği aşağıdaki gibidir:



Bu yöntemin kullanılabilmesi için yapılması gereken ayarların tamamı web sunucusunda (Apache, IIS vb) yapılacaktır. Konunun uygulama sunucusuyla (PHP, ColdFusion, JSP vb) hiçbir ilgisi yoktur. Bunu hatırladıktan sonra, web sunucusunda hangi ayarların yapılması gerektiğine geçelim...


Apache


Yazıdaki örnekte Apache'nin ayarları aşağıdaki gibidir:


Apache'nin kurulu olduğu dizin:

C:\Program Files\Apache Group\Apache


Sitenin kök dizini:

C:\Program Files\Apache Group\Apache\htdocs


Apache yapılandırma dosyası:


C:\Program Files\Apache Group\Apache\conf\httpd.conf


Tüm değişiklikler Apache yapılandırma dosyasında gerçekleştirilecektir. Yapılandırma dosyası açılır ve aşağıdaki ayarlar yapılır:


Apache'ye Rewrite isimli modülü hafızaya yüklemesi emri verilmelidir. Aşağıdaki satırın başındaki kare (#) kaldırılmalır:


LoadModule rewrite_module modules/mod_rewrite.so


Apache'ye Rewrite isimli modülü kullanıma alması emri verilmelidir. Aşağıdaki satırın başındaki kare (#) kaldırılmalır:


AddModule mod_rewrite.c


Apache'ye Rewrite komutlarını kabul etmesi emri verilmelidir. Yapılandırma dosyasına aşağıdaki satır eklenir:


RewriteEngine On


...işte sıra geldi, adres satırının uygulama sunucusuna gönderilmeden önce nasıl dönüştürüleceğine... Apache yapılandırma dosyasına bir satır daha eklenmelidir:



Görüldüğü üzere, dönüştürme işleminin nasıl yapılacağı Apache'ye anlatılırken Kurallı İfade (Regular Expression) dili kullanılmaktadır:


RewriteRule ^/haber/([0-9]*).*$ /haber.php?HaberId=$1


Bu satırdan yüzlerce oluşturulabilir. Böylece, tüm sitedeki sayfaların adreslerini temizleyebilirsiniz:



Not: Apache yapılandırma dosyasında yapılan değişiklikler hemen uygulanmaz. Apache yeniden başlatılmalıdır. Ya da yapılandırma dosyasını yeniden okuması için Apache'ye komut verilmelidir (reload).

IIS

IIS için rewrite eklentileri

4 yorum:

Sinan SERT dedi ki...

İşe yarayan şeyler yazdığın için seni tebrik ediyorum. Bu işlerle uğraşan birisi olarak gezdiğim siteleri hem içerik hem de teknik olarak inceliyorum. Bazen bu tarz kullanımlarla karşılaşıyorum, merak ediyordum fakat önemsemediğim için de araştırmasını yapmadım hiç.

Her ne kadar IIS için yazılmamış olsa bile bu olayın sunucu tarafında çözümlendiğini öğrenmem yeterli oldu. Her zaman da pişmiş armut olmaz canım. Onu da biz buluruz artıkın.

fatih dedi ki...

sayfa aldatmacası da yapılabilir mi?
Örneğin tüm php uzantılarını html olarak kullanıcıya gösterebilir miyiz.Adres çubuğunda devamlı html uzantılı sayfalar görünecek.Böyle bir ayar mevcut mu bu config dosyalarında yada başka bi yerlerde?
Anlaşalır açıklayıcı yazı için
teşekkürler.

Esref Atak dedi ki...

Site altyapısında PHP kullanılıyor olsa bile, web sayfalarının adreslerini .htm olarak ayarlamak mümkündür. Yani;

/haber.php
/makale.php

...sayfalarını

/haber.html
/makale.html

...olarak ve hatta

/haber.jsp
/makale.jsp

olarak adreslemek mümkündür. İşlem, adres satırındaki adresin dönüştürülerek (manipüle edilerek) Uygulama Sunucusuna aktarılması işlemi olduğu için, her türlü "kandırmaca" uygulanabilir. Örneğin; saldırganların, altyapıda kullanılan teknolojinizi yanlış bilmelerini sağlamak için!


Yoğun talep üzerine, IIS'te bu adres dönüşümü işleminin nasıl yapılabileceği hakkında, bu yazıya bilgilendirmeler eklenmiştir. Yani; armut piş ağzıma düş olmuştur!

ynfkr dedi ki...

Çok kaliteli ve öz bir makale hazırlamışsınız. Adresinizi Sık kullanılardaki "Takip Edilesi Bloglar" kategorime aldım. Çok teşekkür eder ve iyi çalışmalar dilerim.

Diğer Yazılar