O que é o mais seguro pra web? Linguagem pura, web framework ou CMS?

linguagens, framework e cms
linguagens, framework e cms

Existe uma certa discussão com relação à segurança de aplicações web acerca do desenvolvimento com o uso de uma linguagem de programação pura (sem framework e CMS), de um web framework como o Laravel, Django, Phoenix, Spring, Rails, ou, ainda, a possibilidade de utilizar um CMS como o Drupal, Media Wiki, Joomla e o famoso WordPress. Todos apresentam certas vantagens e desvantagens com relação a questões de segurança, e tentarei deixar claro, quais são eles e sua aplicabilidade no mundo real do desenvolvimento de software nas empresas.

Usar a linguagem pura com algumas customizações

Aqueles que dizem que usar linguagem pura com algumas customizações é mais seguro usam como maior argumento a questão da segurança por obscuridade do código. O CMS e framework possuem estruturas e recursos padrões que todos os desenvolvedores utilizaram, o que é excelente para agilizar e muito o desenvolvimento. Entretanto, uma vez que o atacante conhece esse padrão que é aberto, o mesmo vai instalar em sua máquina e tentará achar uma falha baseado nessa estrutura padrão do CMS ou framework, como os recursos de autenticação, controle de sessão, rotas e tratamentos que a dita cuja usa por padrão, e isso fica ainda mais fácil em frameworks que implementam a conveniência sobre a configuração, como é no Rails. Quando o atacante descobre essa falha, não somente aquele determinado site ficará vulnerável, mas vários que tenham aquela versão específica, podendo até mesmo serem vítimas os possuidores de outras versões. O WordPress, por exemplo, possui milhões de sites que o utilizam, então seriam milhões de sites que ficariam vulneráveis e pior: como o WordPress é muito popular, teria uma quantidade imensa de hackers no mundo inteiro buscando uma falha nova de segurança.

É importante observar que não é necessário que um hacker fique fazendo esse procedimento de busca de falhas de um CMS ou framework do zero. Já existem ferramentas de pentest focadas nisso, como o WPScan, CMSmap, cms-explorer, joomscan e o site https://pentest-tools.com/cms-vulnerability-scanning/joomla-scanner, que são encontrados no Kali Linux e scripts no exploit db e kitploit. Pensando nisso, alguns desenvolvedores preferem criar um site do zero sem depender de framework e CMS, tornando, assim, a lógica do sistema protegida por obscuridade, pois nenhum hacker saberia, em teoria, o padrão que ele usou para desenvolver aquele site e não tem como ficar explorando isso em suas máquinas como faria com um framework e CMS.

Pensando por esse lado, é seguro, mas o desenvolvedor terá que ter um trabalho muito grande de fazer tudo tão bom iniciando do “zero”, ao contrário de um trabalho robusto e seguro garantido, caso usasse os CMS e framework do mercado. Em cenários de empresas que vendem software, isso é impraticável.

Outro problema em se desenvolver dessa forma é o conhecimento, pois é muito difícil no Brasil achar desenvolvedores que saibam trabalhar de forma segura. O mesmo teria que ter um enorme conhecimento sobre as vulnerabilidades (que são muitas) e pensar em formas inteligentes de mitigar cada falha. Além disso, um sistema criado dessa forma não ficará imune a outras formas padrões de se varrer vulnerabilidades, que até os iniciantes em pentest aprendem.

Usar um framework / CMS

Esses dois ficaram juntos em um só tópico, pois a explicação é praticamente a mesma. Sua utilização é muito comum nos dias atuais, pois tem a vantagem de agilizar o desenvolvimento e entrega, além de já implementar recursos de segurança por padrão oferecidos pela tecnologia, como a questão de controle de login, sessão, formulários seguros, proteção contra SQLi, CSS, CSRF, clickjacking, Host Header Validation, code injection, dentre outros recursos. Isso faz com que o programador foque mais nos requisitos funcionais do sistema do que em questões de segurança e criar outros recursos do zero, como é o caso do helpers, rotas, etc.

Tais ferramentas não são totalmente seguras, mas podemos ter alguns cuidados extras que são muito simples de se realizar, como manter o sistema atualizado e, no caso do CMS, utilizar alguns plugins de segurança disponibilizados pela comunidade. Manter esses sistemas seguros é muito mais fácil e simples do que montar um sistema sem eles com somente a linguagem de programação.

Deve-se refletir que há sim muitos hackers no mundo procurando falhas, mas também há muitos que acharão, corrigirão e divulgarão essas falhas para a comunidade também poder corrigir. Isso faz com que o sistema se torne cada vez mais seguro e robusto com a participação de milhões de pessoas pelo mundo pensando em como melhorar a segurança. Aquele que prefere a segurança por obscuridade, não terá essa vantagem, tendo apenas um pequeno time pensando em soluções de como proteger aquele sistema.

Conclusão

Por mais que desenvolver um sistema sem CMS e framework tenha a vantagem da segurança por obscuridade, isso é algo que não compensa na maioria dos casos, tanto pela dificuldade e tempo gasto como pelo fato de que esse procedimento não elimina todas as vulnerabilidades, às vezes apenas dificulta um pouco. Atualmente, na área de segurança a prática de segurança por obscuridade vem sido desencorajada por alguns especialistas da área, ainda mais com o crescimento do open source.

Uma prova de que o open source não significa necessariamente insegurança pode ser achada no fato do Linux ter o código aberto, e o Windows e Mac terem o código fechado, e, mesmo assim, o Linux não se tornou mais vulnerável que os outros dois sistemas. É recomendável, então, o uso de CMS e framework, e também ter cuidados básicos, como manter o sistema atualizado, ler o tópico de segurança na documentação dessas ferramentas e utilizar plugins de segurança. Destarte, podemos usufruir de um desenvolvimento mais ágil e seguro.