Partilhar via


Problemas de AutoProxy no WinHTTP

Considere os seguintes problemas importantes ao usar o recurso de proxy automático WinHTTP.

Apenas um servidor proxy é suportado atualmente

Atualmente, o WinHTTP não oferece suporte a configurações de proxy que especificam mais de um servidor proxy. Se WinHttpGetProxyForUrl retorna uma estrutura de WINHTTP_PROXY_INFO que contém uma lista de servidores proxy, que o aplicativo define no identificador de solicitação usando a opção WINHTTP_OPTION_PROXY, WinHTTP usa apenas o primeiro servidor proxy na lista. Se esse servidor proxy não estiver acessível, o WinHTTP não fará failover para nenhum dos outros servidores proxy na lista. Cabe ao aplicativo lidar com esse caso, definindo a opção WINHTTP_OPTION_PROXY novamente com o próximo servidor proxy na lista e reenviando a solicitação.

Mitigação de riscos de segurança

O processamento do arquivo de configuração automática de proxy requer a execução do código de script baixado. Algumas preocupações de segurança a considerar: Se o servidor no qual o arquivo PAC reside foi comprometido, é possível que o código de script PAC seja malicioso. Portanto, WinHTTP usa as seguintes precauções para proteger o cliente:

  1. O código de script é impedido de instanciar quaisquer objetos ActiveX. Isso bloqueia muitas funcionalidades potencialmente perigosas, como a capacidade de acessar arquivos e executar E/S de rede.

  2. **Windows Server 2003: **WinHttpGetProxyForUrl delega todo o processamento WPAD a um serviço externo fora de processo, o serviço WinHTTP Web Proxy Auto-Discovery, que é executado sob a conta de usuário interna do Serviço Local de baixo privilégio.

  3. Windows XP com SP2 e Windows Server 2003: Um script PAC não pode ser executado por mais de 60 segundos, após o qual a execução do script é encerrada.

  4. Windows XP com SP2 e Windows Server 2003: WinHTTP rejeita arquivos PAC maiores que 1MB. Um arquivo PAC típico geralmente não tem mais do que alguns kilobytes de tamanho.

Lembre-se de que o processamento do código de script PAC requer o uso de COM, porque WinHTTP usa o componente Microsoft JScript para executar o script. Se o WinHTTP não puder delegar o processamento do protocolo WPAD a um serviço externo de Descoberta Automática de Proxy da Web fora do processo, WinHttpGetProxyForUrl carregará o tempo de execução COM dentro do processo do aplicativo durante a chamada. Se o próprio aplicativo já estiver usando COM, isso não deve ser uma preocupação.

Considerações sobre desempenho

O processo de deteção automática pode ser lento, possivelmente até vários segundos. O WinHttpGetProxyForUrl e funções de WinHttpDetectAutoProxyConfigUrl estão bloqueando funções síncronas. Pode ser que um determinado mecanismo de deteção automática (como o DHCP) seja muito mais lento do que o outro (como o DNS). Se os sinalizadores de deteção automática WINHTTP_AUTO_DETECT_TYPE_DHCP e WINHTTP_AUTO_DETECT_TYPE_DNS_A forem especificados, o WinHTTP usará DHCP primeiro, de acordo com a especificação WPAD. Se nenhuma URL PAC for descoberta emitindo uma solicitação DHCP, o WinHTTP tentará localizar o arquivo PAC em um endereço DNS conhecido.

WinHttpGetProxyForUrl usa o parâmetro WinHTTP Session handle para armazenar em cache o arquivo PAC e os resultados da deteção automática. É melhor usar o mesmo identificador de sessão para várias chamadas de WinHttpGetProxyForUrl, se possível, para evitar a deteção repetida de URL PAC e o download de arquivos. O arquivo PAC é armazenado em cache somente na memória e é descartado quando o aplicativo fecha o identificador de sessão.

Devido ao impacto no desempenho do autoproxy, recomenda-se que apenas aplicativos ou serviços cliente de desktop usem o recurso; Os aplicativos baseados em servidor devem confiar no administrador do servidor usando o utilitário "ProxyCfg.exe".