Como é que SqlCommand higienizar parâmetros?
-
06-09-2019 - |
Pergunta
Usando SqlParameters
é um método recomendado para evitar SQL Injection em suas consultas de banco de dados. Onde posso encontrar a função / código que sanitizes internamente esses parâmetros? Eu gostaria de voltar a utilizar esta função em uma implementação customizada meu. Tentei encontrá-lo com refletor, mas não teve sucesso.
Solução
Ele protege contra SQL Injection, não XSS, e não há nenhum código ou função que desinfeta os dados de parâmetro.
A proteção é realizada por transmitir os valores dos parâmetros para o servidor separadamente da cadeia de consulta, de modo que os valores são não substituído diretamente na instrução SQL.
Então, ao invés de SQL Server em execução algo como isto:
SELECT * FROM [table] WHERE [column] = ParameterValue
É mais como se passou algo como isto:
DECLARE @ParamValue int
-- //@ParamValue variable is populated from the framework in a safe way
SELECT * FROM [table] WHERE [column] = @ParamValue
Esta é mais rápido e muito mais seguro e robusto do que uma função que teria de avaliar os dados de parâmetros. Tal função precisaria ser muito complexo (leia-se propenso a erros) para as coisas do punho como escapar costume personagens e melhorias futuras.
Este passos ordenadamente lado toda a questão:. Dados são dados, o código é código, e nunca os dois devem atender
O seu comentário para o outro, agora excluído, resposta:
Se eu passar o valor O'Rourke, codifica-lo para ser O''Rourke para que ele não quebrar a consulta. Corrigir?
Não, isso não é correto. A variável é criada directamente a partir de um bloco de dados, e assim, não escapando especial ou codificação é necessária.