заборонити прямий доступ до папки та файлу htaccess


134

Ось сценарій:

  • У index.phpкореневій папці є файл
  • деякі файли включені в index.phpяких знаходяться в includesпапці.
  • 1 інший файл ( submit.php) знаходиться в кореневій папці для подання форми.

Я хочу обмежити прямий доступ користувача до файлів у includesпапці через htaccess. також для submit.php. Але включити буде працювати для index.phpфайлу. Наприклад, якщо типи користувачів www.domain.com/includes/somepage.php, це обмежить його (можливо, буде перенаправлено на сторінку помилок).

Відповіді:


266

Я би просто перемістив includesпапку з веб-корінця, але якщо ви хочете заблокувати прямий доступ до всієї includesпапки, ви можете помістити .htaccessфайл у цю папку, що містить просто:

deny from all

Таким чином, ви не можете відкрити жоден файл із цієї папки, але ви можете без проблем включити їх у php.


7
Чи зможе інший файл зробити запит ajax до файлу, присутнього в цій папці?
Чайтанья Чандукар

16
@ChaitanyaChandurkar Ні, запит ajax - це звичайний http-запит, тому його буде відхилено.
jeroen

Sr b / c I нове веб-програмування. Як я можу додати виняток для доступу до свого файлу index.php?
PhatHV

Я використовував заперечення від усіх, і це обмежувало кожну URL-адресу, навіть не показуючи сторінку входу .. :(
Аамір

@Aamir Це правильно, жодна URL-адреса в цій папці не буде доступною, але ви можете без проблем включити їх до інших файлів.
jeroen

56

Це чисте mod_rewriteрішення на основі:

RewriteRule ^(includes/|submit\.php) - [F,L,NC]

Це покаже заборонену помилку використання, якщо URI містить або /includes/або/submit.php


3
Хороша робота над вирішенням файлу для надсилання
CTS_AE

29

Можна скористатись директивою щодо файлів і заборонити доступ до всіх файлів, а потім знову використовувати її для встановлення доступних файлів:

<Files ~ "^.*">
  Deny from all
</Files>

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>

7
Я не впевнений у тому, хто розмістив питання, вирішено чи ні його проблему, але це краса ТАК, що багаторазова відповідь може допомогти багатьом членам. Ця остання відповідь вирішила мою проблему. Я хочу дозволити сайтам отримати файл css, але немає доступу до шрифтів ttf або otf, і бум! вирішено.
Moxet Khan

після цього я не абел для доступу до файлів у підпапках
Gintare Statkute

14

1 рішення на основі вкладиша mod_alias:

RedirectMatch 403 ^/folder/file.php$

Це покаже заборонену помилку для /folder/file.php


1
+1 - Це насправді дуже добре, адже ніхто навіть не може побачити, які файли існують, якщо застосувати 404 до всієї папки, використовуючи регулярний вираз ^folder.
bytecode77

9

Якщо я правильно зрозумів, ви просто хочете заборонити доступ до папки, що включає?

.Htaccess з директивою "DENY FROM ALL", розміщеною в папці include, дозволить зробити це.


8

Ваш Q складається з двох частин, і рішення jeroen, і рішення anubhava працюють для I частини - забороняючи доступ до / включає. Анубхава також працює для другої частини. Я віддаю перевагу останній, тому що я DOCROOT/.htaccessвсе-таки використовую, і це зберігає весь такий контроль в одному файлі.

Однак я хотів обговорити це концепція "заборонити доступ до submit.php". Якщо ви не хочете користуватися, submit.phpто навіщо це взагалі в DOCROOT? Я підозрюю, що відповідь тут полягає в тому, що ви використовуєте її як ціль дії в деяких формах і хочете, щоб вона була запущена лише тоді, коли форма подається, а не безпосередньо, наприклад, від спам-робота.

Якщо це правда, тоді ви не можете використовувати частину II anubhava, оскільки це призведе до відмови вашої форми. Що ви можете зробити тут - це (i) з .htaccessчеком, щоб переконатися, що референт був вашою власною індексною сторінкою:

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php   [NC]
RewriteRule ^submit\.php$    -                                   [F]

І (ii) у вашому генераторі форм PHP index.php включені деякі приховані поля для часової позначки та перевірки. Перевірка може бути, скажімо, першими 10 символами MD5 часової позначки та деякою внутрішньою таємницею. Після обробки подання ви зможете (i) підтвердити, що часова марка та перевірка збігається, та (ii) мітка часу, скажімо, за 15 хвилин від поточного часу.

Це ви можете запобігти спаму, оскільки єдиним практичним способом, щоб спамер міг отримати дійсну пару часу / валідації, був би для розбору форми, але цей скребок матиме лише 15 хвилин життя.


6

Залежно від можливих інших параметрів, встановлених на більш високому рівні, можливо, вам доведеться помістити наступне у свій .htaccess файл у вашому каталозі включає:

Satisfy all
Order deny,allow
Deny from all

Я наткнувся на це, коли верхній каталог визначав базову автентифікацію, включаючи рядок:

Satisfy any

Це заважало моєму забороні вступити в силу, оскільки користувачі пройшли автентифікацію.


1

Ви можете додати до .htaccessфайлу команду нижче

Deny from all
ErrorDocument 403 "nothing is here"

У разі несанкціонованого доступу воно відображатиме повідомлення "нічого тут".

Якщо ви хочете перенаправити код помилки на певну сторінку, ви можете визначити команду наступним чином:

ErrorDocument 404 "/errors/404.html"

Він переспрямовує на /errors/404.htmlекран та показує користувальницьку сторінку не знайдено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.