Измените .htaccess, чтобы запретить доступ к папке, но разрешить доступ только с моего сайта, используя ajax к определенным файлам.

на моем сайте «www.website.com» у меня есть папка с запрещенным доступом с использованием этого .htaccess :

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/.*\ HTTP [NC]
RewriteRule .* - [F,L]

Теперь я хочу иметь доступ только с моего сайта «www.website.com» к определенным файлам PHP с использованием Ajax (POST). Я должен изменить .htaccess как это:

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/.*\ HTTP [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://.*website.com [NC]
RewriteRule \.(php)$ - [NC,F,L]

Но с этим кодом у меня есть доступ ко всем файлам php. Мне нужен доступ только в *Add.php а также *Edit.php , Эти файлы находятся в нескольких подпапках. Что я должен делать ? Это правильный способ сделать это?

0

Решение

Что ж, после долгих поисков, прочтения и тестирования я пришел к выводу, что лучший способ обезопасить сайт, работающий с использованием Ajax:

1 — иметь только один (если возможно) файл, как router.php это будет «маршрут» в зависимости от POST/GET переменные навигации, используя include для файлов, которые находятся в подпапках.

2 — За исключением SESSION-based authentication Вы могли бы также реализовать Basic HTTP authentication и / или HTTPS (SSL) защитить учетные данные пользователя при входе в систему. Если вы не используете HTTP, вы должны использовать шифрование поля или формы, потому что в «проводе» все в открытом виде. Я нашел полезным это http://www.itsyndicate.ca/jquery/

3 — В каждом использовании POST Token-based Authentication с токеном, созданным из учетных данных пользователя, отправьте запрос и затем пересчитайте и сравните.

4 — Я перепробовал множество комбинаций для использования только одного .htaccess в документе ROOT, но всегда чего-то не хватает, или неправильно настроен, или не работает, как я ожидал. Итак, я обнаружил, что проще использовать один .htaccess в каждой подпапке вместо одного в корне. В подпапках, в зависимости от того, что они содержат, .htaccess должен выглядеть так:

### No Direct Access to All files ###
<IfModule mod_authz_host.c>
Order Deny,Allow
Deny from all
#   Allow from 127.0.0.1
</IfModule>

### One of the alternative ways with mod_rewrite ###
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/.*\ HTTP [NC]
RewriteRule .* - [F,L]
</IfModule>

### permit ONLY filetypes in a pattern ###
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} ^(.+)\.(css|js|gif|png|jpe?g|woff)$
RewriteRule .? - [S=1]
RewriteRule ^(.+)$ - [F,L,NC]
</IfModule>

я предпочитаю THE_REQUEST потому что это не включает никаких дополнительных заголовков, отправляемых браузером. Это значение не было неэкранированным (декодированным), в отличие от большинства других переменных, и не имеет смысла подделывать. Я использую пропустить [S=1] потому что я предпочитаю говорить «Если это, то это правило недействительно», поэтому в любом другом случае правило, которое «отрицает», действительно.

5 — Для дополнительной безопасности вы можете использовать код внутри php-файлов, реализуя один из методов, описанных в этой статье:
Запретить прямой доступ к файлу php

6 — Кроме того, если вы запрещаете изображение Hotlinking (и не только) описано Вот , остерегайтесь того, что реферер может быть подделан !!

2

Другие решения

Других решений пока нет …