Executando verificação de segurança...
1

Como me proteger de invasores que podem injetar código malicioso em minha aplicação?

Como me proteger de técnicas usadas por invasores para injetar código malicioso em meu sistema?

Tenho um site feito em Wordpress, a ideia é que seja possível que o usuário se cadastre e publique seus exemplos de código HTML, CSS e JS. Tipo na mesma pegada de funcionalidade do TabNews ou CodePen, só que a diferença é que o usuário poderá mandar códigos para o meu banco de dados! Isso pode ser um grande risco, caso haja códigos maliciosos.

Então, como posso me proteger de invasores, mas sem limitar a funcionalidade do sistema? Existe alguma API... que possa fazer o serviço de verificar se o código é malicioso?

Já tenho um exemplo online, só que atualmente o sistema de segurança impede que algumas tags como inputs e outros, sejam enviados (perdendo assim a principal funcionalidade), quero melhorar esse sistema.

Já agradeço por ler, e pela sua ajuda. Lembrando, segue o projeto abaixo.

Carregando publicação patrocinada...
1

Esta é uma ótima preocupação.

Seu primeiro ponto de visita é o OWASP Top 10 (https://owasp.org/Top10/). Injeção de código é o terceiro maior problema na lista deles... mas temos que conhecer a todos para nos protejer do que estiver no nosso escopo. Veja:

  1. Broken Access Control
  2. Cryptographic Failures
  3. Injection
  4. Insecure Design
  5. Security Misconfiguration
  6. Vulnerable and Outdated Components
  7. Identification and Authentication Failures
  8. Software and Data Integrity Failures
  9. Security Logging and Monitoring Failures
  10. Server-Side Request Forgery

Entrando no link de cada item dá para ter um caminho de como resolver isso.

Especificamennte no seu caso, são duas as medidas a tomar.

A primeira medida é na entrada de dados: tens de tocar os caracteres significativos do html e transformá-los nos seus respectivos códigos html. Isso pode ser gravado num DB que entrará como texto. Na minha época de desenvolvimento, eu usava muito uma função para fazer essa transformação. Dê uma olhada nela para ver o que é e o que procurar na linguagem que você for usar: htmlspecialchars() — Converte caracteres especiais para a realidade HTML (https://www.php.net/manual/pt_BR/function.htmlspecialchars.php). Ao final das explicações, vale uma passada nas seções "Veja também" (link para a função htmlentities()) e "Notas de contribuições de usuários".

É claro que, para gravar isso de forma segura, melhor usar algum ORM e as tais prepared statements.

A segunda medida é nunca usar funções do tipo eval() em entradas do usuário. Elas têm como objetivo processar strings como códigos da linguagem. Eval() é do PHP. Pesquisar na sua linguagem.

Olhar a lista, pode te dar a ideia ou de paralização ou querer resolver tudo o que julgar necessário em tua aplicação. Isso pode ser contraprodecente no início. O recomendado é ser pragmático e aplicar as ações necessárias para esta atividade. As demais ações relacionadas a outros problemas, deixe para resolver quando chegar a vez deles... do contrário, demerará muito para sair do v0.

Espero que tenha entendido bem sua pergunta/necessidade e ter contribuído.

1

Caro jscintra, Gostaria de agradecer imensamente pela sua ajuda e orientação em relação à segurança da minha aplicação web. As informações que você compartilhou comigo, especialmente sobre o OWASP Top 10, foram muito úteis e esclarecedoras.

Agradeço também pelas dicas específicas em relação ao PHP e à entrada de dados, especialmente a função htmlspecialchars().

Sua preocupação com a segurança foi muito importante e agora me sinto mais confiante para planejar e implementar as medidas necessárias para proteger meu site. Novamente, obrigado por sua ajuda e generosidade em compartilhar seu conhecimento.

1

Ô, Marcus, tamos juntos!

Seu backend será em PHP? Se for, considere utilizar alguma lib de Validação. A última que utilizei foi uma do Paul Jones, o cara do projeto Aura (https://packagist.org/?query=aura). Isso foi até 2019. Portanto, "parei no tempo" nesse assunto e não acompanhei mais como as coisas se desenrolaram nessa área desde então.

Por alguma razão, ele não atualizou mais o projeto. Todavia, vou deixar o que sei para você usar como referência... Considere ver as indicações abaixo no PHP Laminas ou em algum outro framework (quem tiver indicações/experiências, contribuições são bem vindas). Se sua praia não for PHP, as explicações dele servirão em muito para te orientar na sua linguagem.

É recomedável seguir as recomendação do "PHP Moderno", seguindo as práticas introduzidas nas PSR (tem link aqui https://packagist.org/packages/aura/filter) e use o composer/autoloader (PSR-4). Visite a documentação no final das páginas dele, como da filter. O package filter dele você pode tanto fazer a sanitização, quanto a validação. Ele faz boas explicações.

Eu, particularmente, gosto de fazer a validação/sanitização na Model... (já vi gente fazendo isso na Controller). Podemos fazer Controllers a torto e a direito... mas normalmente a Model é uma só para escrever na tabela. Portanto, penso que seja lá a última linha de defesa. Aqui ela pode se encarregar apenas de garantir as validações do que pode ou não entrar nos respectivos campos. Em outro lugar, podem ser realizadas outras consistências de acordo com a regra de negócio do que se esteja sendo implementado para casos mais particulares/específicos.

Como eu mensionei de fazer binds e prepared sql, se já não estive usando uma, consulte os demais pacotes relacionados ao DB da própria Aura (aura/sqlquery, aura/sql etc). Existem libs mais porretas, que dão um show... mas penso que elas acabam sendo quase que uma outra linguagem a aprender e fazem muitas requisições no DB para fazerem o que fazem e usam uma tonelada de classes. Preferia o mais simples e direto. Além dessas, considere usar os packages aura/di e aura/autoload

Caso necessite, procure por algum curso que seja intermediário ou avançado em PHP e não tenha trocentos módulos só pra encher linguiça. Vá direto ao ponto com projetos, por exemplo, em MVC e que adote as práticas introduzidas nas PSR e, preferencialmente, que separe o frontend do backend... ou que seja de API RESTfull, por exemplo. (dei um rolê no site a Udemy e não encontrei algo que eu pudesse indicar).

Pesquisando para informar algo mais atual, encontrei este artigo bem interessante: Os Frameworks PHP mais Populares para Usar em 2023. Seja qual for a linguagem que você use, este tópico dele resume tudo e pode te ajudar bastante:

Por que usar uma framework PHP?

5. [Adotar um framework é] Mais seguro do que escrever seus próprios aplicativos

Existem muitas ameaças à segurança PHP, incluindo scripts cruzados, ataques de injeção SQL e falsificação de pedidos cruzados no local. A menos que você tome as medidas certas para proteger seu código, seus aplicativos web PHP ficarão vulneráveis.

O uso de uma framework PHP não é um substituto para escrever código seguro, mas minimiza a chance de explorações de hackers. Boas frameworks têm a sanitização de dados incorporada e defesas contra as ameaças comuns mencionadas acima.

Com essa ideia dos frameworks, outra alternativa aos cursos da Udemy seria procurar boas aulas de un desses frameworks no YouTube. Eu tenderia mais para o Luminas e para o Slin.

Como disse lá no começo, faz um tempo que estou sem colocar a mão diretamente no código, atuando mais na gestão.

Também sempre trabalhei sozinho... então o meu limite era eu mesmos (rsrsrs credo hahaha). Portanto, que trabalhou em equipes maiores e em locais que haviam práticas já consolidadas, pf, compartilha aí a experiência, pois assim todos enriquecem.