Compartilhar via


Problemas de AutoProxia no WinHTTP

Considere os seguintes problemas importantes ao usar o recurso de reprodução automática WinHTTP.

No momento, há suporte apenas para um servidor proxy

No momento, o WinHTTP não dá suporte a configurações de proxy que especificam mais de um servidor proxy. Se WinHttpGetProxyForUrl retornar uma estrutura 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 , o WinHTTP usará 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 risco 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 serem consideradas: se o servidor no qual o arquivo PAC reside tiver sido comprometido, é possível que o código de script PAC seja mal-intencionado. Portanto, o WinHTTP usa as seguintes precauções para proteger o cliente:

  1. O código de script é impedido de instanciar qualquer objeto 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 do WPAD a um serviço externo fora do processo, o serviço de Descoberta Automática de Proxy Web WinHTTP, 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 tem permissão para 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: O WinHTTP rejeita arquivos PAC maiores que 1 MB. Um arquivo PAC típico geralmente não tem mais do que alguns quilobytes de tamanho.

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

Considerações sobre desempenho

O processo de detecção automática pode ser lento, possivelmente por vários segundos. As funções WinHttpGetProxyForUrl e WinHttpDetectAutoProxyConfigUrl estão bloqueando funções síncronas. Pode ser que um mecanismo de detecção automática específico (como o DHCP) seja muito mais lento do que o outro (como o DNS). Se os sinalizadores de detecção automática WINHTTP_AUTO_DETECT_TYPE_DHCP e WINHTTP_AUTO_DETECT_TYPE_DNS_A forem especificados, o WinHTTP usará o DHCP primeiro, de acordo com a especificação do 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 de identificador de sessão WinHTTP para armazenar em cache o arquivo PAC e os resultados da detecção automática. É melhor usar o mesmo identificador de sessão para várias chamadas WinHttpGetProxyForUrl , se possível, para evitar a detecçã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 da reprodução automática, é recomendável que apenas aplicativos ou serviços cliente da área de trabalho usem o recurso; os aplicativos baseados em servidor devem depender do administrador do servidor usando o utilitário "ProxyCfg.exe".