Questão nº 36
Questão de Tecnologia da Informação · FCC TRT15 2024 (nº 36)
Durante o desenvolvimento de um sistema web, é necessário garantir que o software seja seguro e resistente a ataques. Para isso, utilizam-se as melhores práticas de desenvolvimento seguro baseadas em SDL, OWASP CLASP e sua evolução. Para proteger uma aplicação contra ataques de injeção SQL, é crucial
- Autilizar `prepared statements` com `parameterized queries` para interagir com o banco de dados, de forma que o banco de dados faça a distinção entre código e dados, independentemente da entrada fornecida pelo usuário. (alternativa correta)
- Bremover todas as `stored procedures` do código, como recomendado pelo CLASP, pois estas são a principal fonte de ataque e deixam a aplicação vulnerável.
- Cimplementar criptografia simétrica para todas as conexões com o banco de dados e criar filtros personalizados no código para identificar entradas maliciosas após a execução da consulta.
- Dcriar uma rotina que faça um backup automático dos logs antes de executar qualquer consulta SQL, garantindo que qualquer tentativa de injeção possa ser rastreada, conforme recomenda o CLASP.
- Eutilizar funções `eval()` em JavaScript para processar dados do lado do cliente, garantindo que entradas SQL possam ser interpretadas de forma segura no servidor.
Resposta comentada
Gabarito Alternativa A
SQL Injection é quando um atacante engana seu programa para que ele execute comandos de banco de dados que ele não deveria, misturando dados do usuário com o código SQL. Para evitar isso, usamos `prepared statements` (declarações preparadas) que tratam os dados do usuário como apenas dados, nunca como parte do comando SQL.
(A) Correta: `Prepared statements` com `parameterized queries` (consultas parametrizadas) são a defesa principal contra SQL Injection porque eles separam o comando SQL da entrada do usuário. O banco de dados sabe exatamente o que é código e o que é dado, não importa o que o usuário digite, impedindo que entradas maliciosas sejam executadas como comandos.
(B) Incorreta: `Stored procedures` (procedimentos armazenados) podem, na verdade, ajudar a prevenir SQL Injection se forem bem implementadas e usarem parâmetros. Removê-las não é uma recomendação do CLASP para segurança e não resolve o problema. A armadilha da banca é que algumas `stored procedures` mal escritas podem ser vulneráveis, mas a solução não é removê-las, e sim escrevê-las corretamente. Elas não são a "principal fonte de ataque" por si só.
(C) Incorreta: Criptografia simétrica protege a comunicação e os dados, mas não impede que um comando SQL malicioso seja executado. Filtrar entradas após a execução da consulta é tarde demais; o ataque já teria ocorrido.
(D) Incorreta: Fazer backup de logs ajuda na detecção e auditoria de ataques, mas não previne a injeção SQL. A prevenção deve ocorrer antes da execução da consulta.
(E) Incorreta: Usar `eval()` em JavaScript com dados do cliente é uma prática extremamente perigosa, pois permite a execução de código arbitrário e abre portas para diversos tipos de ataques (como XSS), e não tem relação com a segurança de consultas SQL no servidor.
Fonte: FCC TRT15 2024 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.