(primeira pergunta sobre troca de pilha, sinta-se à vontade para comentar / criticar)
Contexto
Eu tenho um servidor Debian com
- Flash Media Server (FMS) ouvindo na porta 80 e 1935 (que é o padrão)
- Apache2 ouvindo na porta 8134
FYI, o propósito do FMS é o streaming de vídeo, entre outras coisas. Ele usa o protocolo RTMP.
Pelo que entendi:
Quando as requisições FMS são bloqueadas em 1935, há um fallback em 80. O protocolo muda e se torna HDS, que é RTMP sobre HTTP (mais lento, mas funciona).
O FMS precisa de 80 portas para fazer esse fallback.
O Apache, por outro lado, fornece arquivos html, css, ... e swf, que são arquivos flash usados no cliente para conectar o servidor.
Do lado do cliente, você alcança esses arquivos na porta 80. O FMS então envia um proxy para o Apache para as solicitações HTTP que ele não pode manipular.
Desta forma, o Apache não precisa ser configurado na porta 80, evitando assim o conflito de portas no 80.
Tudo está funcionando muito bem até agora.
Mas recentemente, tive que adicionar funcionalidade do SQL ao FMS. E o FMS não possui conexão SQL integrada nativamente. Ele mal consegue fazer solicitações HTTP.
Então você tem que lidar com SQL em outra tecnologia do lado do servidor. Como o Apache já está em casa, o PHP / MySQL vem à mente.
Então eu instalei o PHP e o MySQL e criei um script .php de gateway que atua como uma camada de acesso a dados muito simples.
Funciona, o FMS pode solicitar dados JSON feitos de PHP / MySQL com json_encode, e como o idioma do FMS é ActionScript, leia Javascript, eu fiz (new Function ("return" + src)) () e voilà, eu tive meu objeto js direto do banco de dados.
Muito simples e evita construir um servidor J2EE ou trazer de volta o Zend Framework para falar AMF.
Agora vem meu problema de segurança:
o gateway .php é acessível a todos, o que significa que qualquer um pode criar o URL .php com os argumentos GET certos e ler o banco de dados, ou mexer com ele.
Gostaria de permitir que apenas o FMS fale com o gateway. Mas eu preciso que os clientes ainda possam solicitar todos os outros arquivos (html, css, swf ...).