Skip to main content
Blog
Blog

Porque é que os sites precisam de scripts de terceiros?

Ao desenvolver um site, é frequente incluir bibliotecas para ajudar a acelerar o processo de desenvolvimento e evitar reinventar a roda. No entanto

Oct 10, 2024 7 min read
websites-need-3rd-party-scripts-image-cover
Índice

Resumo: porquê os sites ainda carregam JavaScript de terceiros

  • A auto-hospedagem não resolve: Não é possível resolver isto apenas com auto-hospedagem. Muitos scripts de terceiros servem payloads diferentes por user agent, por IP ou por região/idioma, por isso, ao trazê-los para a sua origem, está a entregar uma única cópia desatualizada em vez do conjunto completo de que os seus visitantes realmente precisam.
  • A cside lê cada payload: O pacote npm do Intercom carrega uma frota de scripts em tempo de execução e o @monaco-editor/react totaliza mais de 712.000 downloads semanais enquanto carrega um script de terceiros. O agente JavaScript first-party da cside observa o comportamento em tempo de execução de cada script no navegador e desmonta cada payload ao nível do AST.
  • O CSP confia em domínios, não em código: Se a sua CSP é todo o seu plano de cadeia de fornecimento, tem uma política que confia em domínios, não em código. Decida qual dos dois realmente precisa de conhecer.

Sem tempo? Veja o bloqueio de Magecart e skimmers no navegador da cside. Cobre tudo o que se segue numa única implementação.

Como os scripts de terceiros entram num site

Ao desenvolver um site, é frequente incluir bibliotecas para ajudar a acelerar o processo de desenvolvimento e evitar reinventar a roda. No entanto, há momentos em que é preciso carregar um script a partir de uma fonte externa. Ataques recentes como a apropriação do domínio Polyfill levantam uma questão óbvia: porque é que, afinal, precisamos de scripts de terceiros, e como é que eles acabam num site?

Antes de mais, vamos contextualizar. Scripts de terceiros são ficheiros JavaScript servidos a partir de um servidor que não é o nosso. Por exemplo, suponhamos que administro o meu site, cside.com. Este site foi criado por uma equipa de desenvolvedores, que usaram várias bibliotecas para o montar. Isto é depois compilado / transformado / dividido em ficheiros JavaScript mais pequenos e em menor número do que o código-fonte original. É a isto que chamamos JavaScript first-party (de primeira parte) - é servido como um recurso dentro de cside.com, por exemplo cside.com/_next/static/chunks/main-ab76c1828cff9b09.js.

Uma semana depois, um membro da equipa de marketing pede aos desenvolvedores que adicionem ao site um script para a ferramenta de análise que escolheram. Agora, o site tem o seu primeiro JavaScript de terceiros. Este processo pode continuar, com a equipa jurídica a pedir um banner de cookies, o marketing a pedir outro script de análise, e assim sucessivamente.

Os desenvolvedores conhecem os riscos do JavaScript de terceiros, por isso pesquisam a ferramenta online, fazem alguma investigação e consideram-na fiável.

Este ciclo repete-se até haver uma dezena de scripts ou mais na página. Todos legítimos, todos importantes e todos de terceiros. No pior dos casos, um destes domínios é adquirido, é servido tráfego malicioso e o site fica infetado.

Mas isto é um exagero - e não é, geralmente, assim que os ataques acontecem na prática. Os scripts de nível superior no seu site normalmente não são os alvos, embora isso seja possível (veja aqui a nossa análise sobre o Polyfill). Frequentemente, os scripts carregam outros scripts. Alguns scripts podem até criar iframes e carregar ainda mais scripts. Tal como o seu código first-party utiliza várias dependências, os scripts de terceiros também têm requisitos para se tornarem funcionais, e têm a sua própria cadeia de fornecimento.

Por vezes, até as bibliotecas first-party que adicionamos podem carregar um script durante a execução. Podem fornecer um componente React prático para colocar na página, mas, por trás, estão a adicionar alguns scripts para se tornarem funcionais. Seja a carregar localização, as suas próprias análises, temas ou outra coisa - estão a acrescentar à cadeia de fornecimento de terceiros do seu site.

Por isso, pode pensar: porque não simplesmente descarregar estes scripts e hospedá-los nós próprios? Para alguns scripts básicos, como o jQuery, esta é uma escolha óbvia - e uma que recomendamos. Se estiver a lidar com um script estático na cadeia de fornecimento do seu site, traga-o para a sua origem, se possível.

No entanto, muitos scripts servem conteúdo dinâmico com base no requisitante. Por exemplo, podem verificar o User Agent no pedido e decidir que precisa de uma versão diferente com funcionalidades extra. Ou podem verificar o seu IP e decidir enviar-lhe uma localização diferente do script.

Estes ainda são estáticos por utilizador na maioria das vezes, mas, importa notar, não são estáticos globalmente. Isto significa que, ao servir o script por conta própria, estaria apenas a servir uma variação, e não o conjunto completo de scripts necessário para proporcionar aos seus utilizadores a melhor experiência.

Alguns scripts podem até ter URLs fixas (hard-coded) para sub-scripts que irão carregar. Isto significa que, mesmo que copie o script raiz para o seu site, ele continuará a carregar scripts externos a partir de uma URL remota.

Até bibliotecas que possa estar a usar todos os dias na sua aplicação seguem este padrão. Vejamos alguns exemplos:

O pacote npm do Intercom carrega uma série de scripts em tempo de execução:

https://developers.intercom.com/installing-intercom/web/installation#single-page-app

Snippet de instalação da aplicação web de página única do Intercom a carregar scripts adicionais

Vista do painel da cside a mostrar scripts do Intercom encaminhados através da cside

Mesmo ao usar ferramentas de rastreio de redes sociais, que são inevitáveis para a maioria das empresas que fazem marketing em redes sociais, a primeira coisa que os scripts fornecidos fazem é carregar outro script de terceiros:

Snippet de rastreio do Microsoft Clarity que carrega scripts de terceiros adicionais

Ou então usa um pacote React como o @monaco-editor/react, com mais de 712.000 downloads semanais, que carrega um script de terceiros para grande parte da sua funcionalidade: https://www.npmjs.com/package/@monaco-editor/react

Página do npm do @monaco-editor/react a mostrar o número de downloads semanais

Então, para onde vamos a partir daqui? É por isso que a cside existe. Fazemos o proxy de todos os scripts carregados na página - mesmo os que são carregados durante a execução. Reescrevemos as URLs dos scripts para que a cside os obtenha primeiro, que é capaz de bloquear um script antes mesmo de este ser servido ao cliente.

A cside oferece um ponto de vista único: permite políticas por URL, por domínio, por hash e por cabeçalhos, que podem ser implementadas globalmente em segundos. Se qualquer script tentar carregar um script-filho, a cside saberá disso e analisá-lo-á. E depois dá-lhe o controlo para decidir o que acontece: permitir este script, bloquear este script, e a recolha de dados analíticos que o acompanha.

Para cada script que a cside vê, entregamo-lo ao nosso motor de deteção. O nosso motor de deteção desmonta o script - até ao nível do AST - para descobrir o que faz. E fazemos isto para cada pequena alteração num script, mesmo que seja apenas um caráter. Podemos informá-lo sobre o que um script está a fazer, quando o seu acesso ao seu site muda, e toda uma série de informações de confiança sobre a origem.

Temos analistas de segurança a trabalhar 24 horas por dia para detetar ameaças emergentes e bloqueá-las na nossa camada de proxy antes de estas chegarem a afetar algum dos seus clientes. Combine isto com o motor de deteção automática já mencionado, e passará a ter controlo total sobre a cadeia de fornecimento de terceiros do seu site.

Pode inscrever-se no nosso plano gratuito aqui.

A cadeia de fornecimento do navegador interessa-lhe? Se sim, junte-se a nós nesta missão de proteger todos os utilizadores da World Wide Web: https://cside.com/careers

Simon Wijckmans
Founder & CEO

Founder and CEO of cside. Previously a product manager on Cloudflare Page Shield (now Cloudflare Client-Side Security). Co-chair of the W3C Anti-Fraud Community Group and a Forbes 30 Under 30 honoree. Building accessible security against client-side attacks, web security is not an enterprise-only problem.

FAQ

Frequently Asked Questions

Widgets de chat, análises, anúncios, testes A/B, pagamentos e até bibliotecas de componentes React carregam JavaScript de terceiros em tempo de execução. O grafo de dependências cresce rapidamente porque cada script de terceiros normalmente carrega mais scripts por si próprio.

Faça cada script passar por um monitor que observa o código que é realmente entregue. A cside reescreve as URLs dos scripts para passarem pela nossa edge, bloqueia qualquer alteração maliciosa e mostra o payload real no painel.

Monitore e proteja seus scripts de terceiros

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Comece grátis ou experimente o Business com um teste de 14 dias.

Interface do painel cside mostrando monitoramento de scripts e análises de segurança
Related Articles
Agende uma demonstração

Quer ver isso em detalhe com um engenheiro?

Trinta minutos, no seu próprio site. Sem slides.

Vamos mostrar:

Quais scripts de terceiros estão rodando no seu site agora
Como você está em relação aos requisitos 6.4.3 e 11.6.1 do PCI DSS
Qual parte do seu tráfego é de bots e agentes de IA

Prefere só mandar uma pergunta?

Procurando horários livres…

Apenas humanos de verdade. A gente saberia.

Problemas para agendar? Abrir o agendador em uma nova aba

O que você está tentando resolver?

Conte em uma linha e voltamos com algo útil, não com um discurso genérico.

Costumamos ajudar com:

Ver quais scripts de terceiros rodam no seu site
Evidências para PCI DSS 6.4.3 e 11.6.1
Bots, agentes de IA e roubo de contas

Prefere agendar um horário? Escolher um horário