The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2019-08-26
Desenvolvimento de software

Segurança XSS em bibliotecas Javascript populares. Devo continuar a preocupar-me?

Daniel Grek

É preciso admitir que, em termos das bibliotecas Javascript mais populares, na sua história de desenvolvimento (9, 6 e 5 anos para Angular, React e Vue, respetivamente), muitas coisas boas aconteceram em termos de segurança, especialmente relacionadas com a vulnerabilidade a ataques XSS. No entanto, este artigo abordará as pequenas armadilhas e os princípios a que os programadores ainda devem estar atentos.

XSS

Vivemos na era das frameworks, não das linguagens. Isto implica que os programadores devem poder preocupar-se menos com muitos aspectos do desenvolvimento, incluindo a segurança. A maioria das actuais estruturas de backend implementa módulos de segurança, que estão a ser testados por empresas externas especializadas e grandes sociedades. Por conseguinte, diminuição da sensibilização para a segurança pode ser evidente, por exemplo, entre os jovens programadores, que assumem mais responsabilidade pelos produtos, especialmente em termos de freelancing.

Um dos ataques comuns ao lado do cliente da aplicação é o XSS (Cross-Site Scripting). Este ataque é realizado através da injeção de scripts executáveis do lado do cliente em aplicações Web [1] e utiliza métodos de renderização HTML implementados ou Javascript código avaliadores que o executam. O XSS é relativamente lucrativo, uma vez que podem ser recolhidos muitos dados diferentes, incluindo cookies de sessão ou dados do utilizador, e pode instalar uma aplicação de rastreio, como um keylogger, o que o torna perigoso tanto para os utilizadores como para os proprietários de empresas. Por vezes, são efectuadas outras formas de ataque para permitir o XSS na página, tais como Injeção de SQL.

Exemplo

O formulário de início de sessão na página apresenta o parâmetro loginName enviado no pedido GET na introdução do nome de início de sessão. O valor não é processado nem pelo servidor nem pelo lado do cliente da aplicação. Ao solicitar: http://localhost:8080/login?name=<script>alert(document.cookies)</script>
o código está a ser executado e os dados estão expostos

Este é um exemplo de um ataque XSS refletidoem que os scripts são injectados através de um endereço URL especialmente preparado apresentado à vítima e refletido na resposta do servidor. Outras formas conhecidas de ataques populares são as seguintes:

  • XSS armazenado executada com dados injectados armazenados no lado do servidor, normalmente através de formulários disponíveis na aplicação. A aplicação cliente processa o código que está armazenado, por exemplo, numa base de dados.
  • DOM XSS efectua um ataque XSS sem utilizar o lado do servidor. Na próxima parte do artigo, vamos concentrar-nos nesta forma de ataque.

Vulnerabilidades actuais nas bibliotecas React e Vue

Para as versões actuais React/Vue, foram detectados dois grandes problemas que ainda não foram oficialmente corrigidos. A primeira vulnerabilidade tem a mesma natureza para todas as estruturas e está relacionada com os métodos que permitem a renderização de HTML em bruto nos modelos: v-html e perigosamenteSetInnerHTML, respetivamente, para Vue e React. Cada documentação [2] informa os leitores de que uma utilização imprudente pode expor os utilizadores a um ataque XSS. Se não existirem outras opções para resolver o problema, certifique-se de que os dados são filtrada e escapado. Embora sejam perigosos, não se deve esperar que esses métodos sejam corrigidos. Utilize-os por sua própria conta e risco.

No primeiro trimestre de 2018, foi detectado um grande erro no React, que permitia a execução direta de código através da definição da propriedade do elemento da etiqueta. Passar código de exemplo dentro de atributos, como javascript:alert(1) e a execução de um link renderizado executará o código. Este problema [4] ainda está em aberto e nenhuma correção foi preparada e combinada, por isso certifique-se de que o seu código é seguro. Os exemplos propostos na discussão oficial sugerem algumas formas de ultrapassar este problema.

Se não for possível atualizar para as versões mais recentes, certifique-se de que os problemas antigos não lhe causam problemas, garantindo que o seu código não está exposto:

  • criança nó injeção - React, utilização de React.createElement [5]
  • renderização do lado do servidor - React/Vue [6]
  • Injeção de CSS [8]

Continua a ser sobre Javascript. Ainda se trata de front-end

Não se esqueça que, para além das próprias estruturas ou bibliotecas, o Javascript, enquanto linguagem, tem algumas funções perigosas, que devem ser evitadas ou utilizadas com precaução. Estas funções estão geralmente relacionadas com a manipulação do DOM ou com a execução de scripts. eval() representa funções emblemáticas deste tipo e é extremamente perigosa porque executa diretamente um determinado código em cadeia [9]. Além disso, dê uma vista de olhos ao seu código quando encontrar uma destas funções:

  • document.write
  • document.writeln
  • (elemento).innerHTML
  • (elemento).outerHTML
  • (elemento).insertAdjacentHTML

Neste caso, a utilização de linters com um conjunto de regras adequado pode ser útil para encontrar esses pontos vulneráveis. Existem também muitos analisadores de código abertos ou comerciais que podem ajudá-lo a detetar falhas de segurança no código desenvolvido.

Independentemente da biblioteca/framework escolhida, temos de nos lembrar dos princípios básicos relacionados com o desenvolvimento front-end. Em primeiro lugar, certifique-se sempre de que o código externo que injecta provém de uma fonte fidedigna. Auditoria suas dependências e escolha-as com sabedoria. Algumas podem conter vulnerabilidades graves, expondo o seu código mesmo que tudo esteja bem com o próprio código. Pode ler mais sobre a segurança das dependências aqui:

https://thecodest.co/blog/security-in-javascript-packages/

Então... ainda se deve preocupar?

Sim - e encorajo vivamente toda a gente a nunca confiar em bibliotecas externas ou em si próprio em termos de segurança. Não importa o quão seguro espera que o seu software seja, faça sempre um esforço para o testar tanto quanto possível em termos de formas de ataque comuns [10].

  1. https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
  2. https://vuejs.org/v2/guide/syntax.html#Raw-HTML
  3. https://github.com/facebook/react/issues/12441
  4. http://danlec.com/blog/xss-via-a-spoofed-react-element
  5. https://medium.com/node-security/the-most-common-xss-vulnerability-in-react-js-applications-2bdffbcc1fa0
  6. https://github.com/dotboris/vuejs-serverside-template-xss
  7. https://frontarm.com/james-k-nelson/how-can-i-use-css-in-js-securely/
  8. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Do_not_ever_use_eval!

Ler mais:

5 erros que devem ser evitados na manutenção de um projeto em PHP

Desenvolvimento PHP. Componente de Consola Symfony - Dicas e Truques

Porque é que precisamos do Symfony Polyfill (... e porque é que não devemos)

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese