Использование deny изнутри htaccess в поддомене ограничивает доступ к самому себе

Я столкнулся со странной ситуацией, когда я не смог найти правильный ответ на.

Я использую какой-то API, с помощью которого я могу отправлять ответы на определенные запросы из того же корневой домен.

Мой api находится в субдомене ( https://api.mysite.com ) И в PHP есть несколько клиентских фреймворков, например

  • mysite.com
  • mobile.mysite.com
  • admin.mysite.com

Я хочу, чтобы этот API был доступен только из тот же корневой домен. Поэтому я добавил заголовки AccessControlAllowOrigin, которые работают достаточно хорошо.

Но проблема в том, что я также хочу убедиться, что никто не может получить доступ к этому API, потому что CORS основан на браузере, и я могу легко получить доступ к этому API из других инструментов, таких как как POSTMAN.

Вот почему я добавил код в свой .htaccess , чтобы только с того же IP-адреса можно было получить доступ к моей системе.

Вот мой файл .htaccess .

php_flag display_errors on
php_value error_reporting 9999


SetEnvIf Origin "http(s)?://(www\.)?(mysite.com|mobile.mysite.com|admin.mysite.com)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header merge Vary Origin

RewriteEngine On
RewriteBase /

order allow,deny
deny from all
allow from // MY IP HERE

<RequireAny>
Require ip allow from // MY IP HERE
</RequireAny>

RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]


# DirectoryIndex none.none
# Options -Indexes

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Но проблема в том, что система сама блокируется, я имею в виду, что когда я пытаюсь получить доступ к своему API с помощью AJAX Request , я получаю такую ​​ошибку:

Failed to load resource: the server responded with a status of 403 ()

Что мне не хватает.

Спасибо.

PS Требовать ip allow from // МОЙ IP ЗДЕСЬ Флаг вообще ничего не блокирует.

0
задан 20 December 2018 в 17:35
2 ответа

Попробуйте что-нибудь вроде этого, чтобы разрешить соединения только с локального IP (IP вашего сервера):

Require local

И для авторизации внешних IP:

Require ip your_authorized_ip

Это новый Apache2.4 обозначения. См. документацию по контролю доступа Apache2.4 для получения более подробной информации / конфигурации.

0
ответ дан 5 December 2019 в 04:46

В случае, если кто-то столкнется с такой же проблемой, спасибо @Panama Jack за ответ в SO, вот как я это сделал.

SetEnvIf Referer "example\.com" canpass
SetEnvIf Referer "^mobile\.example\.com" canpass2

Require env canpass
Require env canpass2

Вот исходный ответ .

0
ответ дан 5 December 2019 в 04:46

Теги

Похожие вопросы