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.
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:
- Broken Access Control
- Cryptographic Failures
- Injection
- Insecure Design
- Security Misconfiguration
- Vulnerable and Outdated Components
- Identification and Authentication Failures
- Software and Data Integrity Failures
- Security Logging and Monitoring Failures
- 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.