Oto scenariusz:
- W
index.php
folderze głównym znajduje się plik - Niektóre pliki są objęte
index.php
które znajdują się wincludes
folderze. - Jeden inny plik (
submit.php
) znajduje się w folderze głównym dla akcji przesyłania formularza.
Chcę ograniczyć bezpośredni dostęp użytkownika do plików w includes
folderze przez htaccess. także dla submit.php
. Ale dołączanie będzie działać dla index.php
pliku. Na przykład, jeśli użytkownik wpisze www.domain.com/includes/somepage.php
, ograniczy to (może to być przekierowanie do strony błędu).
To jest
mod_rewrite
rozwiązanie oparte na czystej bazie:To pokaże zakazanego błędem użycie jeśli URI zawiera albo
/includes/
albo/submit.php
źródło
Można użyć dyrektywy Files i zabronić dostępu do wszystkich plików, a następnie użyć jej ponownie, aby ustawić pliki, które są dostępne:
źródło
1 rozwiązanie oparte na liner mod_alias:
Spowoduje to wyświetlenie niedozwolonego błędu dla /folder/file.php
źródło
^folder
.Jeśli dobrze rozumiem, chcesz po prostu odmówić dostępu do folderu include?
.Htaccess z dyrektywą „DENY FROM ALL” umieszczoną w folderze include mógłby załatwić sprawę.
źródło
Twoje Q składa się z dwóch części, zarówno rozwiązania jeroen, jak i anubhava działają w części I - odmowa dostępu / dołączenia. anubhava działa również w części II. Wolę to drugie, ponieważ i
DOCROOT/.htaccess
tak używam a to trzyma całą taką kontrolę w jednym pliku.Jednak to, o czym chciałem dyskutować, to koncepcja „odmowy dostępu
submit.php
”. Jeśli nie chcesz używać,submit.php
to po co w ogóle mieć go w DOCROOT? Podejrzewam, że odpowiedzią tutaj jest to, że używasz go jako celu działania w niektórych formach i chcesz, aby był uruchamiany tylko wtedy, gdy formularz jest przesyłany, a nie bezpośrednio, np. Ze spambota.Jeśli to prawda, nie możesz użyć części II anubhawy, ponieważ spowoduje to niepowodzenie twojej formy. Możesz tutaj (i)
.htaccess
sprawdzić, czy stroną odsyłającą jest Twoja własna strona indeksu:I (ii) w swoim generatorze formularzy index.php w PHP zawiera kilka ukrytych pól dla znacznika czasu i walidacji. Walidacją może być, powiedzmy, pierwsze 10 znaków MD5 znacznika czasu i jakiś wewnętrzny sekret. Przetwarzając przesłaną wiadomość, możesz następnie (i) sprawdzić, czy znacznik czasu i walidacja są zgodne, oraz (ii) znacznik czasu znajduje się w, powiedzmy, 15 minutach od aktualnego czasu.
Możesz w ten sposób zapobiec spamowaniu, ponieważ jedynym praktycznym sposobem, w jaki spamer mógłby uzyskać poprawną parę znacznika czasu / walidacji, byłaby analiza formularza, ale ta zdrapka miałaby tylko 15 minut życia.
źródło
W zależności od możliwych innych opcji ustawionych na wyższym poziomie, może być konieczne umieszczenie w pliku .htaccess w katalogu include:
Wpadłem na to, gdy w wyższym katalogu zdefiniowano podstawowe uwierzytelnianie, w tym wiersz:
To uniemożliwiało zastosowanie mojej odmowy od wszystkich, ponieważ użytkownicy byli uwierzytelnieni.
źródło
Możesz dodać poniższe polecenie do
.htaccess
plikuW przypadku nieautoryzowanego dostępu wyświetli komunikat „nic tu nie ma”.
Jeśli chcesz przekierować kod błędu do określonej strony, możesz zdefiniować polecenie w następujący sposób:
Przekieruje do
/errors/404.html
i pokaże ekran nie znaleziono niestandardowej strony.źródło