Tenho pregado para meus colegas e aqui no SO sobre a vantagem de usar parâmetros em consultas SQL, especialmente em aplicativos .NET. Cheguei até a prometer que eles forneceriam imunidade contra ataques de injeção de SQL.
Mas estou começando a me perguntar se isso realmente é verdade. Há algum ataque de injeção de SQL conhecido que terá êxito em uma consulta parametrizada? Você pode, por exemplo, enviar uma string que causa um estouro de buffer no servidor?
É claro que há outras considerações a serem feitas para garantir que um aplicativo da web seja seguro (como limpar a entrada do usuário e tudo mais), mas agora estou pensando em injeções de SQL. Estou especialmente interessado em ataques contra MsSQL 2005 e 2008, uma vez que são meus bancos de dados principais, mas todos os bancos de dados são interessantes.
Edit: Para esclarecer o que quero dizer com parâmetros e consultas parametrizadas. Ao usar parâmetros, quero dizer usar "variáveis" em vez de construir a consulta sql em uma string.
Então, em vez de fazer isso:
SELECT * FROM Table WHERE Name = 'a name'
Nós fazemos isso:
SELECT * FROM Table WHERE Name = @Name
e, em seguida, defina o valor do parâmetro @Name no objeto de consulta / comando.