Com o propósito de tornar o ambiente cibernético mais seguro, é necessário priorizar a segurança de aplicações web. O processo de desenvolvimento seguro de aplicações web não se resume a apenas utilizar o protocolo HTTPS, em conjunto com uma funcionalidade de login. Isso não é o suficiente para garantir que a aplicação esteja livre de vulnerabilidades. Atualmente, encontramos diversas ferramentas prontas, nas mais diversas linguagens de programação, que auxiliam aos desenvolvedores a construírem um software funcional do zero em um curto período de tempo.
Contudo, é importante ressaltar que um código robusto e que funciona não necessariamente é seguro. A boa notícia é que tais ferramentas se preocupam cada vez mais com segurança e já implementam diversos mecanismos para a proteção contra as principais vulnerabilidades. Porém, é necessário atenção e uso de boas práticas de desenvolvimento seguro para que a aplicação esteja livre de vulnerabilidades.
Abaixo, destacamos recomendações para o desenvolvimento seguro de aplicações.
Elabore e mantenha um inventário de aplicações geridas pelo setor
- O setor responsável pelo desenvolvimento e implementação de aplicações deverá elaborar e manter um inventário com o máximo de informações sobre suas aplicações, como: nome, responsável, ano de elaboração, data das manutenções, local, versão do servidor, atualizações do servidor e demais atualizações, versão de softwares utilizados, linguagens etc.
- Ao concluir o inventário, priorizar a classificação em três categorias: Crítico, Importante e Normal. Tais informações auxiliará no uso e administração eficaz dos recursos institucionais.
Cuidados na implementação
- Valide sempre as permissões do usuário ao acessar uma funcionalidade na qual existam regras de negócio para restringir o acesso aos dados e não somente no recurso.
- Evite guardar em campos ocultos informações críticas ao funcionamento da aplicação, que o usuário não poderia modificar normalmente, como identificadores, preços e status.
- Caso o uso de campos ocultos seja realmente necessário, faça uma validação que os verifique tão logo a requisição chegar ao servidor.
- Valide as informações de todos os campos de um formulário também no servidor (backend), inclusive o tamanho dos campos. Independentemente de existir ou não uma validação no frontend utilizando Javascript.
- Não utilize Javascript para implementar regras de negócio importantes e essenciais para segurança. Se for realmente necessário, lembre-se de replicar a lógica e validar as informações no servidor (backend).
- Valide as entradas de dados da aplicação garantindo que não seja permitido inclusão de código Javascript em seus campos. Assim evitando o ataque Cross-Site Scripting (XSS).
- Filtre e valide parâmetros no servidor na chegada das requisições para rejeitá-la ou eliminar o risco de SQL Injection.
- Aplique mecanismos de segurança para impedir ataques de SQL Injection. Utilize a classe PreparedStatement ou frameworks de persistência, que fazem a tradução de caracteres-chave para que eles não sejam considerados parte do comando SQL.
- Para tratar: Script Injection e Cross Site Scripting, existem duas abordagens:
- Bloquear qualquer requisição com algum parâmetro de que se suspeite que possua script injetado. A implementação deste bloqueio pode ser feita com um filtro equivalente ao utilizado para bloquear ataques de SQL Injection mostrado na seção anterior.
- Trocar os caracteres-chave por entidades HTML, de forma que o conteúdo da variável seja sempre considerado texto e nunca uma tag ou parte de um script.
- Tenha atenção ao permitir o upload de arquivos, valide o formato e tamanho do mesmo. E não exiba o caminho onde a imagem foi salva.
- Armazene todos os arquivos de configuração e sigilosos (extensões: .cfg, .ini, .conf, .log, .pdf, .gbd ) em uma pasta inacessível pela web e gerencie com rigor o acesso aos dados sigilosos, quando for necessário disponibilizá-los.
- As páginas administrativas não devem ser indexadas nos mecanismos de buscas.
- Utilize o conceito de privilégio mínimo para execução dos processos da aplicação, ou seja, o mínimo de permissões para que seja efetuado o serviço.
- Autenticação e controle de sessão:
- Cuidado com exposição (transmissão e armazenamento) de IDs de usuário;
- Controle a quantidade de tentativas de login e bloquear, caso necessário. Recomende ao usuário a confecção de senhas fortes, determinar restrições de quão fortes as senhas estão. Saiba como criar senhas fortes, aqui!
- Implemente mecanismos de controle e bloqueio de acesso depois de um número máximo de tentativas.
- Utilize o CAPTCHA em formulários, principalmente em autenticações.
- Imponha um número mínimo de caracteres na senha é uma boa prática, pois o número de possibilidades que precisam ser testadas aumenta exponencialmente com o número de caracteres da senha.
- Obrigue ao usuário a possuir números, letras e caracteres especiais. Tal medida, diminui a possibilidade de ele utilizar uma senha fraca, o que também reduz o risco de sucesso de um ataque do tipo dicionário. Valide sua senha forte, aqui!
- Altere o algoritmo de autenticação de forma a recuperar somente a senha do usuário e depois compará-la com a senha recebida como parâmetro.
- Não exiba na tela mensagens de exceções vindas diretamente do banco de dados, pois essas podem dar pistas de como está a estrutura do banco e qual o comando que está sendo executado.
- No Banco de Dados:
- Não utilize a senha de administrador para acessar o banco de dados, pois o atacante poderá ter acesso irrestrito às informações.
- Seja criterioso ao conceder papéis e privilégios a usuários de um sistema de banco de dados.
- Cuidado ao conceder privilégios aos usuários, como os modos de acesso a arquivos ou registros de dados (leitura, inserção, exclusão ou atualização).
- Imponha segurança de acordo com o nível no qual determinados dados e usuários foram classificados.
- Mantenha a segurança da rede em que a aplicação está localizada, bloqueando portas de administração, por exemplo.
- Implemente o modelo de controle de acesso, que permita bloquear o acesso às informações às quais um usuário não possuir permissão.
- Gerencie as exceções de segurança que forem lançadas na aplicação, para que se possa ter conhecimento dos ataques que estão sendo feitos contra sua aplicação.
- Se possível, implemente auditoria das ações dos usuários do sistema, tornando possível rastrear as ações e encontrar os responsáveis, quando necessário.
- Não inclua senhas ou chaves no código fonte.
- Não versione arquivos sensíveis. Ex.: arquivos que contenham senhas.
- Crie usuários distintos para diferentes softwares e funções:
- Web/app server, DB;
- Privilégios mínimos;
- Utilize senhas fortes (proteja-se de força bruta) e considere, quando possível, a autenticação de dois fatores.
- Grave as senhas de usuário no banco de dados utilizando um algoritmo de hashing, pois mesmo se um atacante obtiver acesso a essa informação, as senhas estarão protegidas.
- A aplicação em produção ou homologação não deve estar com o modo debug ativado. Quando a aplicação está com o modo debug ativado, é possível ter acesso a informações como: senhas de banco de dados, e-mails, senhas de emails etc. Mesmo em homologação, a aplicação pode ser explorada.
- Seja criterioso nas permissões aos arquivos e diretórios.
- Restrinja o acesso à interface de administração.
- Não utilize conta padrão de administração.
- Mantenha o servidor atualizado (Sistema Operacional, Software do web/app server e demais plugins).
- Siga os guias de segurança dos respectivos fornecedores.
- Opte por utilizar protocolo HTTPS.
- Só utilize código de terceiros que sejam confiáveis.
Referências:
- https://www.gocache.com.br/seguranca/seguranca-em-aplicacoes-web/
- https://medium.com/labcodes/seguran%C3%A7a-de-aplica%C3%A7%C3%B5es-web-101-c425f49e4941
- https://blog.conviso.com.br/saiba-como-aumentar-a-seguranca-de-aplicacoes-web/
- https://www.cert.br/docs/palestras/certbr-webbr2014.pdf
Share this content:
Comments are closed