Protegendo seu aplicativo Web: como fechá-lo contra interferências de terceiros

imagem

De um tradutor: estamos publicando um artigo para você por Jim Medlock, um programador e arquiteto de software. O Medlock fala sobre as maneiras básicas de proteger seu aplicativo ou serviço da web. Vale a pena notar que esse material provavelmente será útil para programadores iniciantes. Embora se os profissionais deixarem seus comentários, todos ficarão agradecidos.

Por que se preocupar com alguém invadindo o aplicativo? Sim, apenas porque há mais e mais pessoas que querem fazer isso ao longo do tempo. Esses são hackers "comuns" para quem superar a proteção de alguém é de interesse esportivo, cibercriminosos que quebram serviços e sites com fins lucrativos, organizações governamentais.

Nos últimos meses, muitas grandes organizações chegaram às notícias após grandes vazamentos de informações. Entre eles, o Facebook e suas 50 milhões de contas roubadas, FIFA com 3,4 TB de dados e 70 milhões de documentos, Google com 0,5 milhão de contas, Marriott Hotels com dados de 427 milhões de clientes de toda a rede.

A Skillbox recomenda: Curso prático de dois anos "Eu sou um desenvolvedor Web PRO" .

Lembramos que: para todos os leitores de "Habr" - um desconto de 10.000 rublos ao se inscrever em qualquer curso Skillbox usando o código promocional "Habr".


Fonte

Não apenas o número de ataques de hackers está aumentando, mas também a quantidade de dano que os cibercriminosos causam. Segundo especialistas, o tamanho médio de perdas diretas e indiretas causadas por criminosos cibernéticos é de US $ 3,86 milhões por um hack bem-sucedido. Claro, isso é uma média do mercado; números reais variam, e praticamente.

Mais algumas estatísticas. Os danos causados ​​por cibercriminosos podem ser julgados pelos seguintes dados:

  • $ 148 - o "preço" de uma conta roubada;
  • US $ 40 milhões - para 1 milhão de contas;
  • US $ 350 milhões - para 50 milhões de contas.



O dinheiro não é o único argumento: pense em quanto tempo levará para colocar tudo em ordem.

Segurança de infraestrutura vs. segurança de aplicativos




A maioria das medidas de segurança visa proteger a base da infraestrutura de TI, como servidor, armazenamento e data center. É necessário, mas não são apenas eles que devem ser protegidos.

As medidas de segurança relacionadas ao aplicativo em si também são extremamente importantes. Eles fornecem todo um conjunto de métodos para encontrar, corrigir e impedir o uso malicioso de brechas no seu software. Vale ressaltar estes:

  • revisão de código realizada por especialistas em segurança da informação, quando o objetivo é procurar exclusivamente locais problemáticos em termos de segurança cibernética;
  • Auditoria baseada em caixa preta com base no trabalho com o aplicativo;
  • revisão da arquitetura do aplicativo antes de escrever a maior parte do código;
  • o uso de ferramentas automáticas que ajudam a avaliar a proteção;
  • lançamento de programas de recompensa que permitem que especialistas de terceiros encontrem áreas problemáticas.

As medidas mais eficazes são baseadas no conceito de segurança camada por camada. Nesse caso, cada um dos elementos protegidos usa seu próprio conjunto de ferramentas.



Você não pode fazer nada com o lado do cliente


O problema é que é improvável que você consiga proteger seu projeto no lado do usuário. Navegadores modernos são vulneráveis, apesar dos esforços de seus criadores.

No caso de serviços da web, o componente fraco de todo o sistema é a chave necessária para a autorização. Por exemplo, aplicativos que usam a API do GitHub devem oferecer suporte à autenticação de token. Se o infrator puder pegar a chave em suas mãos, ele terá todo o acesso ao código e aos projetos da vítima no GitHub.

Para um desenvolvedor de front-end, o perigo é que ele possa ter certeza da segurança completa de seu serviço se medidas como chaves privadas e tokens forem fornecidas. Tudo isso é bom, mas todos os mesmos navegadores são um elo fraco.

É seguro separar dados de segurança como chaves de todo o projeto?


Normalmente, variáveis ​​de ambiente são usadas para extrair dados para um arquivo, como .env. Uma etapa adicional é adicionar o nome desses arquivos ao .gitignore, o que impede a execução de comandos git push para fazer upload em repositórios públicos, onde o arquivo será aberto a todos.



Tudo isso é bom, mas os arquivos .env não são criptografados. No caso do Create React App, eles podem ser verificados usando a opção Developer Tools no navegador, no diretório build / static / js. Aqui, por exemplo, é o que encontramos ao examinar o 0.chunk.js.



Como você pode ver, essa abordagem não oferece vantagens especiais; em alguns casos, é melhor armazenar importantes elementos de segurança no código-fonte. Há outro cenário atraente em que a separação de código é usada para atrasar o carregamento de scripts contendo variáveis ​​de ambiente até que o usuário autentique o aplicativo. Mas se o computador cliente estiver comprometido, nada funcionará - afinal, seu sistema de arquivos é acessível a invasores.

Solução




Diferentemente da parte do cliente, os aplicativos de servidor podem ser protegidos para que dados importantes não caiam nas mãos dos atacantes. Para fazer isso, você pode usar o Oauth para obter um nível adicional de autenticação e controle de acesso, criptografia e protocolos como HTTPS e TLS.



O dilema de proteger segredos de aplicativos pode ser resolvido implementando uma API do lado do servidor. Ao mesmo tempo, ele atua como um servidor proxy para isolar o aplicativo cliente dos provedores de serviços que ele usa. Em vez de usar dados privados no lado do cliente para autenticá-los no serviço, a API se autentica no aplicativo do servidor, executa solicitações e só retorna os resultados ao cliente. As chaves privadas ou outros dados não são divulgados a este em nenhuma circunstância.

Abordagem integrada




Sim, complexidade não são apenas palavras. Para fornecer aos usuários confiança na proteção confiável de seus dados, é necessário um planejamento cuidadoso, uma estratégia de segurança bem pensada, baseada em proteção profunda e atenção aos detalhes.

Não basta confiar em "ilhas tecnológicas". É necessário conectar todos os elementos, entendendo como todo o sistema funcionará.

Somente nesse caso o aplicativo ou serviço estará seguro.

Source: https://habr.com/ru/post/pt433538/


All Articles