Proxy para Secure ArcGIS Server Services. Seguro?

8

Para acessar serviços seguros (com base em token ou credenciais), a Esri recomenda o uso de arquivos proxy ( exemplo .net github ). Ao rotear solicitações por meio do proxy, você pode solicitar serviços seguros em nome do cliente sem expor suas credenciais. Você pode definir uma propriedade chamada allowedRefererse atribuir uma lista de URLs de referência nas quais o proxy trabalhará. Basicamente, o proxy não fará nenhum pedido de URL de referência que não esteja definido. Se definido como '*', qualquer solicitação de referência será processada.

O problema é; o cabeçalho solicitante seja falsificado facilmente por um hacker, apenas configurando uma propriedade falsa de Referenciador HTTP . Nessa situação, eles podem acessar serviços seguros roteando todas as suas solicitações por meio do proxy e configurando o cabeçalho do referenciador para um endereço válido.

Estou procurando recomendações sobre a melhor maneira de solucionar esse problema. Alguma recomendação?

jOshT
fonte
3
Ótima pergunta. Também experimentamos isso recentemente e ficamos tristes ao descobrir que isso provavelmente é menos seguro do que passar um token pela string de consulta. Como você apontou, você pode simplesmente passar solicitações pelo proxy. Conseguimos verificar isso com apenas algumas linhas de código Python ... Conseguimos percorrer todo o diretório de serviços sem credenciais. Pelo menos com o token sendo passado com a solicitação, o token deve ser ativado / recuperado primeiro, o que me parece um pouco mais seguro. Também estou curioso para saber se alguém tem boas sugestões.
crmackey
"A Esri recomenda ...": consulte blogs.esri.com/esri/supportcenter/2015/04/07/setting-up-a-proxy . Parece bom citar um incidente das referidas recomendações.
Gischimp #
Obrigado gischimp. Esse é um bom recurso para configurar o proxy, mas não faz referência a nenhum método para proteger o problema que estamos tendo. Eu sei que o Portal e o ArcGIS Online possuem oAuth2. Gostaria de saber se a próxima versão do ArcGIS Server suportará isso? Por enquanto, parece que @crmackey está correto; o método mais seguro (pelo menos para serviços baseados em token) é não usar o proxy e apenas anexar o token à solicitação GET.
jOshT
Também vale a pena mencionar que você pode adicionar o token aos cookies usando a agstokenchave. Isso não adiciona muita segurança extra, mas pelo menos o token não aparece na string de consulta.
crmackey

Respostas:

1

Eu hospedo o proxy Java no Apache Tomcat que fornece uma página de login. O proxy ArcGIS é executado no mesmo contexto de aplicativo que a página de login. Dessa maneira, meus usuários obtêm acesso com credenciais armazenadas em um banco de dados seguro e separado. O Tomcat faz o gerenciamento de sessões usual, enquanto o proxy ArcGIS ligeiramente modificado lida com as credenciais e tokens ocultos do ArcGIS. Tudo isso é feito em HTTPS.

O resultado é que:

  • As credenciais do ArcGIS nunca são transmitidas para fora da intranet local.
  • Os usuários não conseguem acessar o proxy sem uma sessão válida.
  • As sessões válidas são emitidas apenas para usuários com credenciais apropriadas.
C. David Gibson
fonte
0

Ao rotear solicitações por meio do proxy, você pode solicitar serviços seguros em nome do cliente sem expor suas credenciais.

Eu acho que essa frase é a chave. Quando o proxy é autenticado no servidor GIS, o proxy é configurado com credenciais? Nesse caso, e essas credenciais têm acesso ao serviço de mapa solicitado, isso parece estar "funcionando conforme o esperado".

Se o proxy estiver armazenando / passando credenciais, o proxy está mais preocupado em manter as credenciais seguras do que em manter os dados seguros. Pense em um site de intranet da empresa que exibe dados de mapa de um serviço de mapa seguro.

o cabeçalho solicitante seja falsificado facilmente por um hacker

A declaração acima significa que um invasor externo pode acessar seu proxy diretamente? Nesse caso, você tem mais com o que se preocupar do que um cabeçalho HTTP falsificado.

Os usuários, o proxy e o servidor GIS estão todos dentro da sua rede ou estão usando o proxy para conectar-se a serviços GIS fora da rede? Conhecer alguns detalhes sobre a topologia de rede pode ajudar a obter respostas melhores.

editar: se você tiver um aplicativo Web público que esteja buscando recursos de um servidor GIS protegido dentro de uma rede, provavelmente desejará um proxy reverso em vez de um proxy direto.

Mintx
fonte
2
Acho que o @jOshT compartilha as mesmas preocupações que eu, que é que parece não haver maneira de proteger os pontos de extremidade REST de visitantes indesejados. Sim, o proxy oculta as credenciais, mas se você conhece o URL do proxy, não precisa se preocupar com credenciais, pois é possível rotear todas as suas solicitações através do proxy e as credenciais são passadas no backend. Eu testei isso com algumas linhas de Python .
crmackey
1
Concordo que o proxy faz um bom trabalho em manter as credenciais seguras. Quando você diz 'alcançar o proxy diretamente'; Eu diria mais ou menos. O aplicativo é público (como é o proxy), mas alguém não pode realmente 'ver' o conteúdo do meu proxy (.net). Tomemos, por exemplo, um exemplo da Esri developers.arcgis.com/javascript/samples/ags_traffic . Aqui eles estão usando um proxy para acessar serviços seguros. Usando as ferramentas de rede para desenvolvedores do Chrome, posso copiar a solicitação (cURL) e executá-la na linha de comando para obter as informações. Como o próprio proxy pode ser protegido?
jOshT
@jOshT Você pode colar o arquivo proxy.config e apagar os bits sensíveis? Embora a partir do seu comentário, parece que você pode estar melhor com um proxy reverso em vez de um proxy direto.
Mintx
@Mintx Meu proxy é basicamente o mesmo que o da Esri aqui: github.com/Esri/resource-proxy/tree/master/DotNet, exceto que eu configurei AllowedReferers como a URL para o aplicativo solicitante.
jOshT