Ocultar um script php de solicitações externas

1

(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 ...).

    
por HoverGuy 16.07.2013 / 17:05

2 respostas

0

Acabei de adicionar algum tipo de autenticação básica ao script de gateway.

Eu decidi chamar o script com

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

Todos podem acessar este script se ele souber as credenciais, mas agora uma senha está definida e você precisa saber disso. Assim, fica um pouco mais complicado encontrar esse URL. Como essa solicitação é executada de localhost para localhost no servidor, acho que a segurança agora está boa e ninguém pode "ouvir os pacotes" para encontrá-la. Talvez não seja perfeito. Comentários bem-vindos.

    
por 17.07.2013 / 17:16
2

Use uma regra de .htaccess, mais ou menos assim:

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

Obviamente, você precisaria fazer alterações para aplicar em seu aplicativo, mas essa é a maneira mais fácil.

    
por 16.07.2013 / 17:13