Скрыть скрипт php от внешних запросов

(первый вопрос по обмену стека, не стесняйтесь комментировать / критиковать)

контекст

У меня есть сервер Debian с

  • Flash Media Server (FMS) прослушивает порты 80 и 1935 (по умолчанию)
  • Apache2 прослушивает порт 8134

К вашему сведению, целью FMS является потоковое видео, между прочим. Он использует протокол RTMP.

Из того, что я понимаю:

Когда запросы FMS блокируются в 1935 году, происходит сбой на 80. Протокол меняется и становится HDS, то есть RTMP поверх HTTP (медленнее, но работает).

FMS нужен 80 порт, чтобы сделать этот запасной вариант.

Apache, с другой стороны, предоставляет файлы html, css,... и swf, которые являются флэш-файлами, используемыми на клиенте для подключения к серверу.

Со стороны клиента вы получаете доступ к этим файлам через порт 80. Затем FMS передает Apache запросы HTTP, которые он не может обработать.

Таким образом, Apache не нужно настраивать на порту 80, что позволяет избежать конфликта портов на 80.

Пока все отлично работает.

Но недавно мне пришлось добавить функциональность SQL в FMS. И у FMS нет встроенного SQL-соединения. Он едва может выполнять HTTP-запросы. Таким образом, вы должны обрабатывать SQL на другой серверной технологии. Поскольку Apache уже в доме, на ум приходит PHP/MySQL.

Поэтому я установил PHP и MySQL и создал скрипт.php шлюза, который действует как очень простой слой доступа к данным.

Это работает, FMS может запрашивать данные JSON, сделанные из PHP/MySQL, с помощью json_encode, и поскольку язык FMS - это ActionScript, я прочитал Javascript (new Function("return " + src))() и вуаля, у меня был мой объект js прямой из базы данных.

Очень просто и позволяет избежать создания сервера J2EE или вернуть Zend Framework для работы с AMF.

Теперь моя проблема с безопасностью:

Шлюз.php доступен всем, что означает, что любой может придумать URL-адрес.php с правильными аргументами GET и прочитать из базы данных или связываться с ним.

Я хотел бы разрешить только FMS говорить с шлюзом. Но мне нужно, чтобы клиенты все еще могли запрашивать любой другой файл (html, css, swf...).

2 ответа

Решение

Я закончил добавлять какую-то базовую аутентификацию для скрипта шлюза.

Я решил назвать сценарий с

http://localhost/script.php?login=user&password=xyz&action=todo&param=something&...

Каждый может получить доступ к этому сценарию, если он знает учетные данные, но теперь пароль установлен, и вы должны его знать. Таким образом, найти этот URL немного сложнее. Поскольку этот запрос выполняется с локального хоста на локальный хост на сервере, я думаю, что безопасность теперь хорошая, и никто не может "прослушать пакеты", чтобы найти его. Может быть, это не идеально. Комментарии приветствуются.

Используйте правило.htaccess, вроде этого:

<Files ~ "\yourscript.php$">
    Order allow,deny
    Allow from your.fms.ip.address
    Deny from all
</Files>

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

Другие вопросы по тегам