Padrões para um software seguro
Todo software parte de requisitos que podem ser funcionais ou não funcionais. Os do primeiro tipo garantem que a entrega funcione. Já os do segundo tipo, muitas vezes não são completamente atendidos por restrições do negócio. A segurança do software não é funcional, mas é tão importante que, se não tiver a devida atenção, pode inviabilizar a utilização do mesmo.
É importante que, ao planejar um novo software, os envolvidos pensem em padrões que garantam a segurança em vários níveis. Experiências em projetos de software anteriores podem ser a fonte destas definições, além de consultas às revistas, websites e outras publicações especializadas. Vejamos alguns exemplos de boas práticas neste sentido:
- Todas as configurações do software devem ter suas informações sensíveis criptografadas quando em ambiente de produção. O Net, por exemplo, oferece ferramentas nativas para criptografia de partes do arquivo web.config
- Definir maneiras de evitar SQL Injection. Este tipo de ataque é muito comum e é capaz de coletar informações protegidas ou ainda inutilizar um sistema
- Evitar passar e receber valores sensíveis de consulta na URL de websites. Neste caso os parâmetros são transmitidos via método GET do protocolo HTTP. Quando não se pode usar criptografia SSL, por restrições de negócio, expõem-se os parâmetros em texto puro (plain text) para o usuário, ou quem venha a sniffar (capturar pacotes) a rede
- Tratar sempre os dados recebidos via HTTP no backend. Caso não tenha esse cuidado, mesmo uma pequena alteração na URL pode, em alguns casos, executar uma consulta não prevista expondo informações que não deveriam ser acessíveis ao usuário
- Não codificar a lógica de negócio em javascript. Com o surgimento de novos frameworks em javascript alguns desenvolvedores podem ficar tentados a focar nesta linguagem, mas lembre-se de que qualquer um pode acessar o código-fonte neste formato, e expor as regras de negócio
Os processos de garantia da qualidade (QA) e testes também devem seguir estes padrões com o intuito de manter um alto nível de segurança para o software criado. Por isso, um alinhamento prévio entre os membros da equipe, no planejamento do projeto, é fundamental.
Não é difícil concluir então que, para os projetos de sistemas de uma empresa serem seguros, exige-se certo nível de maturidade nos processos de criação do mesmo. Mais especificamente, os envolvidos devem documentar as definições de segurança além de divulgá-las e monitorar seu uso nas diversas etapas de produção do software.