Usuário com melhor resposta
Evitar SQL Injection com SQL Dinamico

Pergunta
-
Boa tarde pessoal vocÊs sabem como faço para evitar sql injection.
Meu caso eu uso sql dinamico e os parametros vão ser passados caso tenha valores se forem nullos não entram e ai vai a minha duvida
exempço IF o @cpf esta vazio eu passo a consulta sem o where
DECLARE @Query VARCHAR(MAX) = 'SELECT * FROM dbo._Teste WHERE CPF = ''' + @CPF + '''' EXEC(@Query)
Respostas
Todas as Respostas
-
-
-
Ddev13,
As observações feitas anteriormente são de grande importância e relevância.
Aproveitando esta sua dúvida, em 2019 realizei um palestra com o MVP Dirceu Resende no evento MVPConf Latam 2019, o qual abordamos especificamente alguns cenários e soluções relacionadas a segurança e invasão, dentre eles Query Dinâmica e SQL Injection.
Neste post do blog do Dirceu, você vai poder encontrar de forma prática e entender os conceitos sobre estes dois assuntos: https://www.dirceuresende.com/blog/sql-server-como-evitar-sql-injection-pare-de-utilizar-query-dinamica-como-execquery-agora/, você vai poder observar que o exemplo demonstrado no post esta totalmente relacionado com o seu cenário.
Evitar o uso de query dinâmica é o melhor cenário, mas caso não venha a ser possível, tente transformar sua query em uma query parametrizada, fazendo uso da System Stored Procedure SP_ExecuteSQL para realizar a execução do instrução ou lote de instrução de mais segura e protegida através dos protocolos de segurança existentes no SQL Server.
Acessando a documentação oficial da SP_ExecuteSQL, você vai encontrar a seguinte observação:
Importante
Executar instruções Transact-SQL em tempo de compilação pode expor os aplicativos a ataques maliciosos.
Aproveito para sugerir outros posts que podem lhe ajudar a implementar um cenário mais seguro:
- Execute Dynamic SQL commands in SQL Server
- Protecting Yourself from SQL Injection in SQL Server – Part 1
- Protecting Yourself from SQL Injection in SQL Server – Part 2
- Using Parameters for SQL Server Queries and Stored Procedures
- Using Triggers to Mitigate Some SQL Injection Effects
- SQL Injection – the golden rule
- SQL Injection: Defense in Depth
- Everything you wanted to know about SQL injection (but were afraid to ask)
- Stored procedures and ORMs won’t save you from SQL injection
- Dynamic SQL & SQL injection
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]