-
Essa questão foi dada como certa mas cabe aqui um breve comentário.
Acho que a exploração ocorre na camada de apresentação. Uma camada de apresentação mal protegida permite ao atacante explorar o banco de dados por meio de consultas inválidas no domínio da aplicação (SQL Injection).
O fato de dizer que a vulnerabilidade de segurança é da camada de banco de dados de uma aplicação é no mínimo questionável.
-
Concordo com o leoh, marquei errado justamente pensando que isso seria o erro, visto que a camada de banco de dados, ou no MVC mais conhecida como Modelo, recebe o que foi processado nas camadas anteriores, Visão e Controle, e acessa o banco. A proteção a ataques de SQL Injection deve ser feita na camada de apresentação, portanto considero a afirmativa errada.
-
Com o devido respeito, discordo de ambos os colegas acima com convicção.
Tanto no PHP quanto em JAVA, o tratamento das consultas DEVE ser feito na camada de persistência, ou de banco de dados. Por exemplo, para resolver SQL Injection em Java basta sempre usar corretamente Prepared Statement e não concatenar às Strings das consultas parâmetros que venham informados pela Interface com o Usuário.
Exemplos de artigos:
Java:
https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java
PHP:
http://codigofonte.uol.com.br/artigo/php/evite-sql-injection-usando-prepared-statements-no-php/imprimir
-
A Injeção de SQL (SQL Injection) é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entrada de dados de uma aplicação.
Exmplos em http://pt.wikipedia.org/wiki/Sql_injection
-
Concordo com o amigo Tiago.
A forma mais eficaz de combater o SQL-Injection é através da criação de Prepared Statements e Stored Procedures na própia camada do banco de dados.
-
Para mim, o fato da vulnerabilidade ser tratada na camada de persistência não significa dizer que a vulnerabilidade esteja residente nessa camada. Para mim, a vulnerabilidade é da camada de Aplicação, mas a tratativa, por uma recomendação, é na camada de persistência.
Estou começando a achar que chutando questões eu terei mais chance.
-
A camada de apresentação tem responsabilidades no que diz respeito as manipulações via SQL injection, mas a responsabilidade pelo tratamento de consultas (query) continua sendo da camada de banco de dados, sendo que cada linguagem de programação pode fornecer "boas maneiras" para isso.
-
A exploração ocorre na aplicação para atingir o banco de dados.
Segundo Navathe (2011, p.576)"Em um ataque de Injeção de SQL (SQL injection), o atacante injeta uma entrada de cadeia de caracteres pela aplicação, que muda ou manipula a instrução SQL para o proveito do atacante. Um ataque de injeção de SQL pode prejudicar o banco de dados de várias maneiras, como na manipulação não autorizada do banco de dados, ou recuperação de dados confidenciais. Ele também pode ser usado para executar comandos em nível do sistema que podem fazer o sistema negar serviço à aplicação."
Bibliografia:
Sistemas de Banco de dados - 6 edição 2011
Autor: Elmasri, Navathe