Métodos para redirecionar para um servidor de utilitários

4

Eu tenho uma situação onde eu preciso facilitar uploads de arquivos de até 200M para um servidor de utilitários que é separado do servidor do site principal. Aqui está minha configuração:

Authenticated
Client on
Public Internet
    /\    \
    |      \_____ 200M
    |            \_____  
    |                  \_____
    V                        V
Authenticating <------->  Utility Server
Web Site                  (EC2, Windows, Apache, Python, Django)
Server
(EC2 LAMP)

Minha solução atual é simplesmente que meu servidor da Web passe a URL do EC2 do servidor Utility e permita que o cliente se comunique diretamente com o servidor do Utility. Isso tem duas falhas - ele expõe a URL do servidor utilitário não autenticado e exige truques de vários domínios no cliente para rotear o upload do POST para o servidor do utilitário.

A questão é qual é a melhor maneira de ocultar o servidor de utilitários do cliente, sem precisar enviar os dados de upload de arquivos através do servidor da web? Estas são as ideias que pensei tentar:

  1. Alias de DNS do servidor de utilitários com um subdomínio. Isso provavelmente corrige meu problema de script entre domínios, mas não tenho certeza se isso ajuda a proteger o servidor de utilitários. Talvez eu possa verificar o cookie de autenticação do servidor web do servidor de utilitários?
  2. Regra de reescrita na configuração do Apache do site. Não estou claro como isso afeta onde os dados do POST seriam roteados.
  3. Redirecionar na configuração do Apache do site. Não tenho certeza se posso ocultar a URL do servidor de utilitários do usuário com um redirecionamento.
  4. Redirecionar do código do controlador do site. O mesmo problema que o número 3, mas achei que poderia ser melhor que o número 3, já que ele passaria a solicitação pela camada de autenticação do PHP.
  5. Algo melhor ??

Notas:

  • A configuração incomum do servidor de utilitários é uma função da interseção do software disponível para os utilitários que ele precisa executar.
  • O servidor do utilitário NÃO é um alvo de alto valor para danos sérios. Seria suficiente ter o equivalente de segurança para trancar a porta da frente, mas eu gostaria de evitar deixar a chave debaixo do tapete.
por mjhm 17.08.2011 / 21:03

1 resposta

3

Você não pode ocultar a URL do servidor de utilitários do cliente sem fazer proxy no servidor da web. Eu configuraria uma chave compartilhada no servidor da Web e no servidor do utilitário e procederia da seguinte maneira:

O servidor da web desenha um link ou redireciona o cliente para o servidor do utilitário com os seguintes parâmetros:

  1. nome de usuário autenticado
  2. carimbo de data / hora de geração de link (ou redirecionamento)
  3. ip do cliente
  4. assinatura (os 3 valores anteriores foram divididos com a chave compartilhada)

No servidor do utilitário, você verifica isso:

  1. A assinatura recebida está correta (refazendo o hash com o compartilhamento chave)
  2. o ip do cliente é o mesmo que o relatado no parâmetro
  3. o tempo decorrido desde que o timestamp recebido no parâmetro é menor que uma quantidade razoável (10-20 segundos deve ser suficiente, dado que ambos servidor web e servidor de utilitários usam a mesma fonte de tempo)

Se todas as verificações forem passadas, você poderá aceitar o usuário como autenticado (porque confia na chave compartilhada), iniciar uma sessão e desenhar o formulário para o upload do arquivo.

    
por 17.08.2011 / 23:23