Durante o desenvolvimento de um sistema web, é necessário ga...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa Correta: A - Utilizar prepared statements com parameterized queries
Vamos analisar o tema central da questão: proteção contra injeção SQL, que é uma técnica de segurança fundamental em sistemas que interagem com bancos de dados.
Uma injeção SQL ocorre quando um invasor é capaz de inserir ou "injetar" código SQL malicioso em uma consulta, comprometendo a segurança do banco de dados. Para se proteger contra esse tipo de ameaça, uma das melhores práticas é o uso de prepared statements e parameterized queries. Estas técnicas fazem com que o banco de dados entenda a diferença entre o código SQL e os dados fornecidos pelo usuário, reduzindo o risco de uma injeção.
Por que a alternativa A é correta? Porque o uso de prepared statements e parameterized queries é amplamente reconhecido como uma das formas mais eficazes de mitigação contra injeções SQL. Estas práticas são recomendadas por organizações como a OWASP em suas diretrizes de segurança de aplicações web.
Análise das alternativas incorretas:
B - Remover todas as stored procedures não é uma prática recomendada. Stored procedures podem, na verdade, aumentar a segurança quando usadas corretamente, pois encapsulam a lógica de negócios e podem ser protegidas com permissões específicas.
C - Implementar criptografia simétrica para conexões não é suficiente para mitigar injeções SQL. Embora a criptografia proteja a confidencialidade dos dados, ela não impede a execução de código malicioso no banco de dados. Filtros personalizados também são insuficientes, pois podem ser facilmente contornados.
D - Criar backups de logs auxilia no rastreamento de atividades, mas não previne injeções SQL. A prevenção deve ocorrer no nível de consulta, antes que o SQL seja enviado ao banco de dados.
E - Usar funções eval() em JavaScript não é seguro e não tem relação direta com a proteção contra injeção SQL. Eval() é, na verdade, uma prática desaconselhada por permitir a execução de código arbitrário.
Conclusão: A segurança em sistemas web é crítica, e proteger o banco de dados de injeções SQL é uma parte essencial desse esforço. Entender e aplicar práticas seguras, como o uso de prepared statements, é fundamental para o desenvolvimento seguro de software.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
(A) Utilizar prepared statements com parameterized queries para interagir com o banco de dados, de forma que o banco de ados faça a distinção entre código e dados, independentemente da entrada fornecida pelo usuário.
Em sistema de gerenciamento de banco de dados (SGBD), uma instrução preparada , instrução parametrizada é um recurso em que o banco de dados pré-compila o código SQL e armazena os resultados, separando-os dos dados. Os benefícios das instruções preparadas são:
- eficiência, porque podem ser usados repetidamente sem recompilação
- segurança, reduzindo ou eliminando ataques de injeção de SQL.
Injeção de SQL (SQL Injection) é um tipo de ameaça de segurança que se aproveita de vulnerabilidades em sistemas que trabalham com bases de dados realizando ataques com comandos SQL; onde o atacante consegue inserir umainstrução SQL personalizada e indevida através da entrada de dados de uma aplicação, como formulários ou URL de uma aplicação online.
Gabarito A
Para proteger uma aplicação web contra ataques de injeção SQL, é crucial utilizar queries parametrizadas (ou prepared statements).
Essa é a medida mais eficaz e amplamente recomendada. Além disso, outras práticas complementares incluem:
Queries Parametrizadas (Prepared Statements): Esta é a defesa número um. Em vez de concatenar strings para construir a consulta SQL, você define a estrutura da consulta SQL e depois passa os valores dos parâmetros separadamente. O banco de dados diferencia os comandos SQL dos dados de entrada, impedindo que dados maliciosos sejam interpretados como parte do comando SQL.
Validação e Sanitização de Entrada:
- Validação (Whitelist): Validar todas as entradas do usuário, garantindo que elas estejam no formato, tipo e faixa de valores esperados. Por exemplo, se espera um número, recuse qualquer entrada que não seja um número.
- Sanitização (Blacklist/Whitelist): Remover ou escapar caracteres especiais que poderiam ser interpretados como parte de um comando SQL. Embora menos robusto que queries parametrizadas, é uma camada extra. É mais seguro usar "whitelist" (permitir apenas o que é conhecido como bom) do que "blacklist" (bloquear o que é conhecido como ruim), pois é difícil prever todas as combinações maliciosas.
Retroceder Nunca Render-se Jamais !
Força e Fé !
Fortuna Audaces Sequitur !
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo