🥷 Que tal falar segurança em nosso feijão com arroz: JavaScript e React?
Ameaças a conhecer e recomendações para mitigá-las. Mais: novas versões do Bun, Node, ESLint e Git; Dockerfiles com IA; atitudes pós-sênior; e conselhos do pai da eXtreme Programming.
Recentemente, tivemos o episódio do apagão global provocado por um bug em software da CrowdStrike. Como segurança cibernética e de software anda em alta após o episódio, por que não olharmos para nosso próprio "espeto de pau em casa de ferreiro”?
Estamos falando de práticas de segurança em duas das tecnologias que mais usamos: JavaScript e React.
Vulnerabilidades mais comuns em aplicações web, especialmente na atualidade, abrangem:
falsificação de solicitação entre sites (CSRF); e
Para lidar com isso, trazemos a seguir práticas que vale conhecer, adotar e difundir. Dica: busque conceitos listados aqui na web e procurar aprender mais sobre eles. Muitos fazem parte do dia a dia de qualquer web developer.
Práticas de segurança para JavaScript
Securitização de APIs:
Uso obrigatório de HTTPS
Implementação de listas de controle de acesso (ACLs)
Utilização de métodos de autenticação (ex: chaves de API, OAuth)
Validação de entradas
Implementação de Políticas de Segurança de Conteúdo (CSP):
Definição de domínios confiáveis
Controle sobre carregamento de recursos
Sanitização de entrada:
Limpeza e validação de dados inseridos pelo usuário
Escape de caracteres especiais
Prevenção de ataques Cross-Site Scripting (XSS):
Validação e codificação de entradas
Uso de cookies HTTP-only
Ferramentas de segurança para JavaScript:
Snyk: plataforma de segurança para identificação automática de vulnerabilidades
Zed Attack Proxy (ZAP): ferramenta de teste de penetração de código aberto
Cypress: framework para testes automatizados de segurança
Auditorias de segurança regulares:
Verificação de dependências
Análise de vulnerabilidades no código
Isso pode resolver muita dor de cabeça do lado de JavaScript. Mas também cabe entender vulnerabilidades em aplicações de página única (SPAs), que é onde entra segurança também para o React.
Vulnerabilidades em aplicações React
Autenticação inadequada no backend:
Confiança excessiva na segurança do lado do cliente
Falta de verificação de tokens JWT no servidor
Exposição de informações sensíveis:
Armazenamento inadequado de tokens no navegador
Exposição de dados sensíveis no código-fonte do cliente
Manipulação de estado no cliente:
Confiança em estados do cliente para decisões de segurança
Falta de validação de dados no servidor
Cross-Site Scripting (XSS) em componentes React:
Uso incorreto de dangerouslySetInnerHTML
Falta de sanitização em props dinâmicas
Vulnerabilidades em dependências:
Uso de bibliotecas desatualizadas ou com falhas conhecidas
Falta de monitoramento regular de dependências
Um caso ocorrido na AMA Cloud, sistema de nuvem da Siemens, ilustra um pouco disto. Uma equipe da Traceable ASPEN (plataforma de rastreamento de dados) conseguiu contornar a autenticação SSO da Microsoft e ganhar acesso não autorizado à aplicação devido a falhas na implementação de segurança tanto no lado do cliente quanto do servidor.
Mitigar riscos como estes envolve:
Implementação de autenticação:
Verificação de tokens JWT no servidor
Uso de técnicas de refresh token
Implementação de autenticação multi-fator quando apropriado
Proteção de dados sensíveis:
Criptografia de dados em trânsito e em repouso
Minimização de dados armazenados no cliente
Uso de práticas seguras de armazenamento de tokens
Validação consistente de dados:
Implementação de validações tanto no cliente quanto no servidor
Uso de bibliotecas de validação confiáveis
Atualização regular de dependências:
Monitoramento constante de vulnerabilidades em bibliotecas
Implementação de processos de atualização automática
Testes de segurança contínuos:
Realização de testes de penetração regulares
Implementação de análise de código estático e dinâmico
Mesmo que a segurança seja cada vez mais uma área especializada de DevSecOps, cabe a desenvolvedores estudarem e conhecerem ameaças existentes e formas mais eficazes de mitigá-las ou contorná-las.
Afinal, para empresas e clientes, não importam especializações e responsabilidades, mas seu negócio, sua vida, sua reputação, seu dinheiro, seus dados. Mais a respeito, para se aprofundar, neste e neste textos da The New Stack. Bom aprendizado!
❓O que é Sidecar Design Pattern?
Sabe aquela espécie de "vagãozinho" que se acopla à lateral de uma moto, como um assento extra ou espaço para carga? Talvez isso dê pistas sobre como funciona tal padrão em software. Responderemos ao fim da edição.
🌟 Bun, Node, ESLint e Git em novas versões
Você já viu algum desses anúncios antecipados aqui. Mas, caso não viu… Bun v1.1.21 corrige 72 bugs e melhora a velocidade de descompressão do fetch() em 30%, além de introduzir a flag --fetch-preconnect
, que reduz a latência de conexões HTTP. Node.js v20.16.0 LTS traz process.getBuiltinModule(id)
para carregar módulos internos com mais eficiência e aprimora a segurança ao depreciar APIs baseadas em motores OpenSSL. ESLint v9.8.0 traz recursos como SourceCode#getLoc/getRange
, que aprimoram a precisão das verificações de configuração e a robustez das regras de linting. Git 2.46, por fim, inclui bitmaps de pseudo-merge, que aceleram buscas e manipulação de histórico em grandes repositórios, além de novas opções no comando git config
, que otimizam o gerenciamento de repositórios.
📄 Que tal a IA para elaborar Dockerfiles?
Não torça o nariz. Quem está sugerindo é o próprio Docker. Convenhamos: configurar certos Dockerfiles pode ser um saco desafio, certo? A série Docker Labs GenAI está abordando como IA pode não só ajudar a escrever Dockerfiles, mas a entender o projeto e criar arquivos otimizados. Em vez de depender de templates genéricos, a proposta envolve analisar o projeto e gerar Dockerfiles em três estágios, o que melhora performance e organização do código. A série também trata de funções que permitem ajustar o Dockerfile conforme melhores práticas, como utilização de imagens base atualizadas e cache de pacotes. Mais no blog do Docker.
🤔 É possível ir além de sênior em software?
The Caring Techie Newsletter afirma que sim e elenca três habilidades para isso — que, na nossa opinião, fazem sentido mesmo a quem ainda é júnior. A primeira recomendação é "aprender a se dimensionar" — transformar seu impacto pessoal em força coletiva, seja delegando tarefas, seja orientando outras pessoas. A segunda é "encarar a ambiguidade com confiança": transformar problemas vagos em soluções claras e tomar decisões informadas mesmo quando dados são escassos. Por fim, "influenciar sem autoridade", ou seja, a capacidade de alinhar equipes mais por credibilidade do que por mera persuasão. Dica de uma ex-Google e ex-Uber.
🤖 Giro da Ia: Hallucination Index, GitHub Models, Deaddit (um Reedit de IAs) e mais
Em mais um giro da IA, a empresa Galileo.ai lançou o "Hallucination Index", índice de alucinação de modelos de IA: Claude 3.5 Sonnet e Claude Opus, da Anthropic, alucinam menos que modelos da OpenAI, como ChatGPT. Falando em Anthropic, uma série de tutorais no GitHub sobre como trabalhar com IAs da empresa. GitHub Models vai permitir uso de diversos modelos de IA em playground, codespaces e VS Code. The Wall Street Journal noticia o clamor por IA generativa (mesmo que outra coisa funcione melhor). Reddit está bravo com IAs que raspam seus dados, enquanto no Deaddit (nome sugestivo) IAs postam e comentam entre si. Baita negócio: Copilot é responsável por mais de 40% da receita do GitHub no ano. Para descontrair: um RPG só com IAGen. Para pensar, um novo paradigma em programação: Chat Oriented Programming (CHOP) ou Programação Orientada a Bate Papo.
👴🏻 O ótimo como inimigo do bom o suficiente, segundo Kent Beck
Kent Beck é uma lenda do software. Um dos 17 signatários do Manifesto Ágil em 2001, criador da metodologia ágil Extreme Programming (XP) e do Test Driven Development (TDD), em entrevista recente, recomenda: “Há um código, está meio bagunçado, preciso alterá-lo. Devo arrumar primeiro? Aqui está esse recurso, devo fazer um pouco de design antes de trabalhar nele? [...] E a resposta provavelmente é sim, mas não muito. Não se empolgue.” É o conselho do veterano para focar no "bom o suficiente", não no "ótimo" (normalmente, inatingível). Além disso, Beck lembra da natureza social do desenvolvimento de software, da importância da comunicação diária para entregar o máximo de valor e que ser um técnico virtuoso não é o suficiente — o contexto do código é o que importa. Mais na CTO Insights. Vale também conferir Tidy First, a newsletter do cara.
✅ Resposta: O que é Sidecar Design Pattern?
"Sidecar" é um padrão de design utilizado em arquiteturas de microsserviços, onde um processo ou serviço secundário (o sidecar) é executado ao lado de uma aplicação principal. O serviço auxiliar é implantado no mesmo ambiente, compartilhando o ciclo de vida e recursos da aplicação principal, mas operando de forma independente. Normalmente, o serviço principal é responsável pela lógica de negócios central, enquanto o sidecar fornece funcionalidades adicionais, como logging, monitoramento, configuração e capacidades de rede, sem alterar o código da aplicação principal. A abordagem é útil quando a adição dessas capacidades na aplicação principal mostra-se complexa, arriscada ou impraticável. O isolamento das tarefas auxiliares em um processo separado também melhora modularidade, manutenção e escalabilidade de aplicações. Mais sobre aqui ou na The Polymathic Engineer.
Obrigado por ler!
Voltaremos com mais fatos, tendências e dicas na próxima semana. Curta, compartilhe, comente e vote na enquete. Obrigado por ler e por estar com a BeTalent!