O Segredos dos Grandes Buscadores 🕵️♂️
Oi, Matheus aqui novamente. Hoje, compartilho com vocês uma descoberta que, por acaso, se tornou um desafio do k7.
A Dúvida Inicial e a Jornada de Descoberta
A pergunta pode parecer muito simples à primeira vista: "Você sabe como colocar um buscador no navegador?" No entanto, essa questão me levou a uma madrugada de MUITA pesquisa e algumas descobertas. A resposta era mais complexa do que eu imaginava.
Depois de muita busca, descobri o "padrão OpenSearch", um padrão sem documentação ativa que envolve a criação de um XML específico para que seu site seja detectado por navegadores. Por exemplo, meu primeiro XML ficou assim:
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Aparda</ShortName>
<Description>Aparda Search - Onde a Busca se Torna Descoberta.</Description>
<Image height="16" width="16" type="image/x-icon">https://aparda.com/uploads/brand/favicon.png</Image>
<Url type="text/html" template="https://aparda.com/web?q={searchTerms}"/>
</OpenSearchDescription>
Em seguida, precisei referenciar esse XML no cabeçalho do site:
<link rel="search" type="application/opensearchdescription+xml" href="https://aparda.com/opensearch.xml" title="Aparda Search">
Até aqui, tudo certo. O Aparda estava aparecendo automaticamente na lista de buscadores, estava buscando e eu estava feliz.. ai percebi que algo estava faltando: cadê as sugestões de busca????
Minha busca por sugestões me levou a uma página de documentação do chromium sobre Tab Search e também a descobrir um elemento crucial:
xml<Url type="application/x-suggestions+json" method="GET" template="https://minhaurl.com/busca?q={searchTerms}"/>
Adicionei isso ao meu site, mas para minha surpresa, não funcionou conforme o esperado (minha api de sugestões não é pública)
Explorando as Diferenças entre Plataformas
Continuei buscando, muito mesmo, e quando estava sem esperanças, decidi olhar como o Ecosia fazia. Para minha surpresa, eles também utilizavam o padrão de XML referenciado. O Brave seguia o mesmo método, e até mesmo o Yandex adotava essa abordagem. Entretanto, ao analisar o Google e o DuckDuckGo, percebi que eles optavam por um caminho diferente (2 reais ou um caminho misterioso?).
Exemplos de URLs de Sugestões:
- Ecosia: https://ac.ecosia.org/autocomplete?q={searchTerms}&type=list
- Brave: https://search.brave.com/api/suggest?q={searchTerms}
- Yandex: https://suggest.yandex.com/suggest-ff.cgi?part={searchTerms}&uil=pt&v=3&sn=5&lr=101585&yu=9676503311676554044
A URL do Yandex chamou minha atenção, pois ao acessá-la, um arquivo TXT era baixado, semelhante ao método utilizado pelo Google para suas sugestões de busca (Exemplo do Google). Senti que estava próximo de uma solução, mas mesmo após diversos testes, não consegui que fosse detectado automaticamente.
Vale ressaltar que esse processo me pareceu bastante inseguro, uma vez que os usuários têm acesso direto ao endpoint, possibilitando o consumo indiscriminado em diferentes sites e aplicativos.
Em Busca de Soluções: Desvendando um Pouco mais
Hoje de manhã, encontrei um artigo interessante que trouxe uma nova perspectiva para navegadores baseados em Chrome. O autor destaca que a descoberta automática só funciona se o mecanismo de busca estiver na página inicial e se houver um campo de entrada type="search" ou "text" com o name="s".
<form>
<input type="search" name="s" />
</form>
ou
<form>
<input type="text" name="s" />
</form>
Conclusões e Desafios Futuros
Nessa jornada ai eu percebi que a segurança desse processo é uma preocupação válida. O fato de alguns mecanismos permitirem o acesso direto a um endpoint de sugestões pode ser uma "vulnerabilidade em potencial" (Imagina se um engraçado resolve fazer um flood ali e fica fazendo consultas aleatórias ele me "F*de").
Se alguém já enfrentou e solucionou esse problema, ficarei extremamente grato por compartilhar conhecimentos kkkk. Este é só mais um desafio na nossa jornada de construção do Aparda hehehe! 🌐✨
Vou atualizando vocês nos comentários sobre como resolvi o problema (se eu resolver kkkk)
Referências:
- Padrão OpenSearch: Documentação não oficial no github pois a oficial parece não existir mais...
- Chromium Tab Search: Chromium Tab to Search
- Artigo de Auto Descoberta: Search Engine Autodiscovery