на моем сайте «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
, Эти файлы находятся в нескольких подпапках. Что я должен делать ? Это правильный способ сделать это?
Что ж, после долгих поисков, прочтения и тестирования я пришел к выводу, что лучший способ обезопасить сайт, работающий с использованием 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
(и не только) описано Вот , остерегайтесь того, что реферер может быть подделан !!
Других решений пока нет …