Durante o desenvolvimento de um sistema web, é necessário ga...

Próximas questões
Com base no mesmo assunto
Q3291024 Banco de Dados
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 
Alternativas

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