
CIBERSEGURANÇA
Cibersegurança: O Básico que Você Deve Saber

Princípios de Segurança na Programação
Anteriormente entendemos a função valiosa da cibersegurança e, além disso, vimos que existem diferentes tipos de ataques. Com isso em mente, é importante abordar alguns princípios básicos que são importantíssimos para garantir a segurança na programação.
Autenticação e Autorização
**Autenticação** tem a função de verificar a identidade do usuário, de um sistema ou dispositivo, garantindo que estes são quem deveriam ser. Com isso, é possível impedir acessos não autorizados. Existem variados métodos de autenticação — o mais famoso é o login com senha, visualizado em variados sistemas, como acesso bancário, escolar e a jogos. Além deste, existem também acesso por biometria e tokens de segurança.
**Autorização** determina quais recursos um usuário já autenticado pode ou não acessar. Mesmo com a identidade confirmada, muitos usuários podem não ter acesso a determinadas camadas ou serviços de um sistema. Um bom exemplo são os sites escolares, onde um aluno pode ver apenas o seu boletim e suas próprias informações após o login, mas o coordenador acadêmico pode acessar dados de múltiplos alunos.
Essas duas funções devem ser combinadas para garantir a segurança do sistema: primeiramente o usuário é autenticado e, posteriormente, é verificado se ele tem permissão para acessar determinadas funções. Com isso, acessos não permitidos são evitados e a exposição de dados sensíveis para pessoas inadequadas não acontece.
Autenticação Multifatorial (MFA)
A autenticação multifatorial (MFA) é um método de segurança que exige mais de uma forma de autenticação. Além da senha (o que você sabe), você pode precisar de algo a mais para conseguir autenticar sua identidade.
A primeira forma adicional que pode ser solicitada é algo que o usuário **possua**, como um código enviado por SMS ou e-mail, ou gerado por um aplicativo de autenticação (como Google Authenticator ou Authy), que cria códigos temporários e dificulta sua descoberta.
Além dessa maneira, o usuário pode precisar provar sua identidade com algo que ele **é**, como características biométricas — impressões digitais, reconhecimento facial e íris —, garantindo que a pessoa tentando acessar a conta é realmente o usuário esperado.
Criptografia
A criptografia é definida como a técnica usada para proteger informações, transformando dados legíveis (texto simples) em dados ilegíveis (texto cifrado), para impedir que terceiros acessem informações sensíveis.
A criptografia é importante por variados aspectos: proteção da privacidade dos usuários, impedindo acessos não autorizados a informações pessoais; garantia da integridade dos dados transmitidos; e prevenção de roubo de identidade.
### Criptografia Simétrica
Usa uma **única chave** para criptografar e descriptografar os dados. Tanto o remetente quanto o destinatário precisam conhecer a mesma chave. No entanto, dessa maneira, um possível atacante só precisaria ter acesso a uma chave para descriptografar a informação.
Um exemplo clássico é a **Cifra de César**, um dos métodos mais antigos e simples: cada letra do texto original é substituída por outra que se encontra um número fixo de posições à frente no alfabeto. Por exemplo, a palavra "Hello" com chave 3 ficaria "Khoor". Devido à sua simplicidade, não é utilizada em aplicações modernas, mas possui valor educativo e aparece em muitos jogos de investigação.
### Criptografia Assimétrica
Utiliza um **par de chaves**: uma chave pública e uma chave privada. A chave pública pode ser compartilhada livremente e é usada para criptografar; a chave privada deve ser mantida em segredo e é usada para descriptografar.
O destinatário gera o par de chaves e compartilha apenas a pública com o remetente, que a usa para criptografar a mensagem. Mesmo que alguém intercepte a mensagem, não conseguirá descriptografá-la sem a chave privada do destinatário.
Uso de Senhas Seguras
As senhas são a principal forma de proteger uma conta contra acesso não autorizado, mas é importante que sejam fortes e protegidas adequadamente. Existem técnicas que ajudam nesse processo: **Hash** e **Salt**.
### Hash
Hash é uma técnica que transforma dados de qualquer tamanho em uma sequência fixa de caracteres. Essa transformação é **irreversível**: a partir do valor hash gerado, não é possível obter o valor original de volta.
Na prática, ao invés de armazenar a senha diretamente, o sistema guarda o hash derivado dela. Quando o usuário faz login, o sistema compara o hash gerado com o armazenado. Caso o banco de dados seja comprometido, o invasor não terá acesso às senhas originais — apenas aos hashes.
### Salt
O Salt é utilizado junto com o hash para aumentar a segurança. Consiste em adicionar um valor aleatório à senha **antes** de gerar o hash. Isso é importante porque, sem o salt, dois usuários com a mesma senha gerariam o mesmo hash, tornando o sistema vulnerável a ataques como as **Rainbow Tables**.
Uma Rainbow Table é uma tabela com hashes pré-computados de senhas comuns. Ela permite encontrar senhas rapidamente ao comparar hashes. Com o Salt, mesmo que duas pessoas escolham a mesma senha, os hashes gerados serão diferentes, tornando esse tipo de ataque ineficaz.
**Exemplo prático:**
- Ana: senha "1234" + salt "abc" → hash de "abc1234" - Luiz: senha "1234" + salt "def" → hash de "def1234"
Ambos usam "1234" para entrar, mas o que é armazenado é o hash combinado com o salt único de cada um — o que garante que hashes iguais nunca sejam armazenados.
Gerenciamento de Sessões
Após um usuário ser autenticado, uma sessão é criada para que ele possa interagir com o sistema. É necessário proteger essa sessão, pois ela pode ser "sequestrada" por um atacante que quer agir em nome do usuário legítimo.
Os **cookies de sessão** contêm o ID da sessão e permitem que o servidor identifique o usuário em cada requisição. Para evitar que um atacante consiga acessá-los, é importante configurar os cookies com:
- `HttpOnly` — impede o acesso via JavaScript - `Secure` — garante que o cookie só seja transmitido por conexões HTTPS
Outro fator importante é a **duração das sessões**. Uma sessão não deve durar indefinidamente — especialmente para evitar riscos caso o usuário se esqueça de sair ou deixe o sistema aberto em um dispositivo público. Por isso, é importante definir um tempo de expiração por inatividade ou por período fixo.
Além disso, cada vez que o usuário fizer login novamente, é importante criar um **novo ID de sessão**, pois um atacante pode conhecer o ID de uma sessão anterior e tentar reutilizá-lo.
### Verificação de Atividade
O sistema pode implementar verificações periódicas para garantir que a sessão ainda pertence ao usuário que a iniciou. Essa verificação pode ser feita verificando se o IP, o tipo de dispositivo ou o navegador mudou durante a sessão, ou solicitando autenticação adicional em transações sensíveis.
Conclusão
A cibersegurança é essencial para proteger sistemas e dados contra acessos não autorizados e ataques. Para garantir uma boa segurança, é necessário implementar práticas como autenticação e autorização adequadas, autenticação multifatorial, criptografia de dados e uso de senhas seguras. Além disso, é fundamental proteger a gestão de sessões para evitar que sejam sequestradas por atacantes. Adotar técnicas como hashing, salt e medidas de segurança para cookies pode ajudar a fortalecer a proteção do sistema e minimizar riscos.
Referências
FEDRECHESKI, Geovane. Modelo de Segurança Zero Trust: entenda como funciona e sua importância. *Alura*, 19 maio 2023. Disponível em: <https://www.alura.com.br/artigos/modelo-seguranca-zero-trust-como-funciona>. Acesso em: 25 fev. 2025.
MATA, Lucas Ribeiro. Criptografia: entendendo as diferenças entre simétrica, assimétrica e homomórfica. *Alura*, 19 out. 2023. Disponível em: <https://www.alura.com.br/artigos/criptografia-diferencas-simetrica-assimetrica-homomorfica>. Acesso em: 25 fev. 2025.
ORESTES, Yan. Como criar uma boa senha. *Alura*, 12 jul. 2018. Disponível em: <https://www.alura.com.br/artigos/como-criar-uma-boa-senha>. Acesso em: 25 fev. 2025.
STEINBERG, Joseph. *Cibersegurança Para Leigos*. Tradução de Júlio Costa. São Paulo: Alta Books, 2018.