Giriş Yapılmadan Site İçindeki Dosyalara Erişimi Nasıl Engellerim?
Merhaba PT ailesi.
PHP ile basit bir login sayfası tasarlıyorum. Bu sayfadan giriş yapılmadan site içindeki dosyalara erişimi engellemek istiyorum.
Site içindeki dosyalar html olarak bulunur. PHP olsa giriş yapıldımı yapılmadı mı gibi sorgular yapabilirdim. Fakat ben site içine rastgele bir çok dosya atacağım, rar arşivleri html dosyalar vb. tek tek kontrol edemeyeceğim kadar fazla içerik olacak içinde.
Bu kontrolu nasıl yapabiliriz?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (7)
.htaccess ıle olmaz ındırmek ıstedıgınde de ınderemez adam
her dosyanın ısmını taratıp sql e yazdıracaksın. ve gizleyeceksın dosyaları faklı klasorde
sonra ındırırken o dosya adlarını random yaptırıp ındıreteceksın bır baglantı tek sefer calısacak.
inder.php dosyası tek ındırme baglantısı olacak her klasore ayrı lınk vs vermeyeceksın
böyle tarat veri tabanına yazdır tum dosya ısımlerını
$ac = opendir("dosyalar/");
while($veri = readdir($ac)){
$yaz=$db->prepare("INSERT INTO dosya (dosyad) VALUES (?)");
$yaz->execute([$veri]);
}
Doğrudan erişim engellenemiyor. .htaccess ile dizin indexlemesini engelledikten sonra, indir.php diye bir dosya olusturursunuz bu dosyaya isteğinizi get ile ve üye girişi yapmışsa sağlarsanız. İndireceginiz dosyaların veritabanindan çağrılan id lerini get ile indir.php dosyasina gonderirseniz isimlerini gizlemiş olursunuz. Dosya ismi indirildiginde düzgün görüntülenir. Hiç vt de tutmayip dosya adini md5 ile hashleyerek de get ile gonderir dogru dosyayi indirtebilirsiniz. Bu sekilde dosyanin hangi dizinden indiği, hangi adı taşıdığı aşikar olmayacaktır. Klasör adi desifre oldu ise de adı degistirirsiniz tüm bu islemlerden önce. İndir php dosyasında oluşan get parametresi almış linkin direk kopyalanarak browserda calistirilmaya calisildiginda inmemesi icin de refferer kontrolü yaparsiniz olur biter.
cpanelden kapatmayı denersen daha iyi olur :)
apache ayarları
global ayarlar
indexes tiksiz oldumu oldu bitti
bütün dizinleri kapatırsın.
htaccess dosyası oluştur için
Options -Indexes
yaz yine kapatırsın.
https://gist.github.com/psdtohtml5/5646810
https://gist.github.com/vanita5/6293f77a5d9be686210b -> Bunu düzenlersen işine yarar gibi.validate()
fonksiyonu içerisinde session kontrolü yaptırırsın.
https://codecanyon.net/item/customerfriendly-download-login/411480 -> Bunun ücretsizini bulamadım.
@samkofte hocam evet o bir yöntem fakat o dizin listelemeyi engelliyor. İçerideki dosyalara ulaşmayı engellemiyor. Yani şöyle söyleyim;
https://www.samkofte.com/documents/
şeklinde yazdığında içinde bahsettiğiniz index varsa anasayfaya yönledirecektir, yoksa o klasördeki tüm dosyaları gösteren bir FTP arayüzü gelecektir ki bu hiç istenmeyen bir durum.
https://www.samkofte.com/documents/onemli.rar
Fakat bu şekilde dosya yolunu yazdıklarında içinde index.php olsa da olmasa da dosyaya ulaşabiliyorlar.
Benim yapmak istediğim https://www.samkofte.com/documents/
klasörüne erişim olmasın ama kullanıcı girişi yapıldığında (USER_ID isimli bir SESSION varsa) o klasöre erişim olabilsin istiyorum, bir yolunu bulamadım henüz.