Navegação do proxy web em PHP: URLs relativas, cookies e origens
Planeie as URLs dos recursos, a navegação, os cookies e os limites de origem ao transformar a obtenção com PHP num proxy web para o navegador.
Antes de acrescentar mais reescrita a um obtenedor em PHP, escolha para onde deve ir o próximo recurso. Um documento obtido de https://destination.example/catalog/ e devolvido em https://viewer.example/browse?url=... pode conter:
<img src="photo.jpg">
<a href="details/42">Details</a>O navegador resolve essas referências com o documento que recebeu no visualizador. O facto de o PHP ter obtido os bytes originais não estabelece a base remota.
Um elemento base pode apontar as URLs relativas para o destino, mas esses pedidos podem depois ir diretamente do navegador para o destino. Para manter cada pedido através do PHP, são necessárias, em vez disso, URLs de proxy e um modelo de encaminhamento mais amplo:
| Recurso ou ação | Tratamento necessário |
|---|---|
| Ligações e imagens | Resolva-as face ao documento remoto e produza a rota pretendida |
| Importações e recursos CSS | Use a base remota da folha de estilo |
| Formulários | Preserve o método e os dados enviados |
| Redirecionamentos | Mantenha a navegação dentro do modelo permitido |
| Pedidos criados por scripts | Trate as URLs ausentes do HTML original |
Algumas substituições com expressões regulares não podem prometer compatibilidade geral com sítios carregados de scripts. Para um documento público conhecido, pode bastar desativar a navegação, permitir ligações diretas ou encaminhar um subconjunto suportado através do visualizador. Preserve os tipos de média reais em vez de tratar cada resposta como HTML.
Devolver marcação não fidedigna a partir do seu domínio também lhe dá a origem de navegador do visualizador, não a identidade do sítio obtido. Isole esses documentos das páginas de conta e administração. Defina cookies remotos por visitante, cabeçalhos permitidos de reencaminhamento e destinos de redirecionamento; um frasco de cookies partilhado pode misturar inícios de sessão remotos.
Comprometa-se com esse limite de suporte antes de oferecer uma sessão de navegação. Para a navegação comum por outra saída, a interface de proxy nativa do navegador, como as definições HTTP/SOCKS do Firefox, preserva o URL de destino e o modelo de origem do navegador sem exigir esta camada de obtenção e republicação. Para um teste separado de sítio público, a lista de proxies gratuitos fornece pontos finais candidatos; faça corresponder o protocolo nas definições do navegador.