InfoSec-iniciante

👾 Inicio Cronograma OWASP

Boas práticas de códigos

Para criar esse guia usei como base OWASP Secure Coding Practices e OWASP Cheat Sheets

1. Segurança de entrada e saída de dados:

1.1 → Validação de entrada de dados

Sempre valide e sanitize todas as entradas de dados vindas dos usuários ou de fontes externas para prevenir ataques de Injeção de SQL, Cross-Site Scripting (XSS) e outros.

A validação de entrada deve ser aplicada tanto no nível sintático quanto no nível semântico.

→ Nunca confie de forma alguma na entrada do usuário.
→ Validar e rejeitar as entradas é melhor do que sanitizá-las.

💡 Leia mais:

1.2 → Output encoding

Sempre valide dados em um sistema confiável(ou seja, o servidor), codifique todos os caracteres, a menos que sejam considerados seguros e sanitize a saída de dados não confiáveis usando comandos do sistema operacional.

A codificação de saída (output encoding) é uma técnica eficaz para prevenir ataques de Cross-Site Scripting (XSS), que é um dos principais tipos de ataques que podem ser prevenidos por meio dessa prática de segurança.

💡 Leia mais: aqui e aqui

2. Segurança de autenticação e gerenciamento de acesso:

2.1 → Autenticação e Gerenciamento de Credenciais

A autenticação refere-se à validação das informações fornecidas pelo usuário, como nome de usuário e senha, para garantir que correspondam às credenciais corretas e autorizar o acesso ao sistema.

O gerenciamento de credenciais abrange atividades relacionadas ao armazenamento seguro e à proteção das informações de autenticação dos usuários, como senhas, chaves de acesso ou certificados digitais. Isso envolve a implementação de práticas de segurança, como a criptografia, para evitar o acesso não autorizado a essas informações.

Todas as medidas de autenticação devem ser implementadas em um sistema confiável, o que normalmente é o servidor onde o backend da aplicação está em execução.

💡 Veja sobre:

2.2 → Gerenciamento de Sessão

O gerenciamento de sessões refere-se ao processo seguro de lidar com várias solicitações de um único usuário ou entidade em um aplicativo ou serviço baseado na web. Durante uma sessão, que consiste em várias solicitações e transações, um usuário é autenticado para acessar o sistema. O gerenciamento de sessões envolve a troca de informações secretas com usuários autenticados, tornando as comunicações de rede criptografadas essenciais para garantir a segurança do processo.

Boas práticas:

💡 Veja sobre:

2.3 → Access control

No contexto das aplicações web, o controle de acesso depende da autenticação e gerenciamento de sessões:

Broken Access Control ocorre quando um usuário pode ter acesso e executar ações que não lhe são atribuídas.

Exemplo: temos uma aplicação com dois tipos de usuários, admin e comum. O usuário admin pode excluir e editar qualquer usuário comum, enquanto o comum só realiza ações na sua própria conta. A falha acontece quando o usuário comum tem as mesmas ações do usuário admin, resultando em falha de escalação de privilégios.

Boas práticas:

💡 Veja sobre:

3. Error handling and logging

3.1 Error handling

Verifique se a aplicação não exibe mensagens de erro que contenham dados sensíveis que possam auxiliar um atacante, incluindo ID de sessão, versões de software/framework e informações pessoais. Um dos riscos mais comuns relacionados ao tratamento inadequado de erros é o Information Disclosure, que pode revelar informações confidenciais para usuários não autorizados.

Boas práticas:

3.2 Logging

Logging é essencial para a segurança do código, permitindo aos desenvolvedores monitorar e detectar incidentes de segurança. Práticas adequadas de logging envolvem capturar informações relevantes, como interações do usuário e erros, para análise posterior. Isso ajuda a identificar comportamentos suspeitos e rastrear a causa de erros, facilitando a correção de bugs e a resposta a possíveis ataques. É importante seguir práticas recomendadas, como definir uma estrutura clara de logs e proteger informações confidenciais.

Boas práticas:

💡 Veja sobre Error handling and logging: