SQL INJECTION
ola gente gostaria de saber se meus amigos deste forum poderiam me responder esse duvida
sabemos que se usarmos concatenação na query é uma abertura para invasoes alguem saberia me respoder copmo faço essa proteção usando um datatable, e um like
datatable
Public Function Buscar_Atividade_Ativada(ByVal Atividade As String) As DataTable
Dim tabela As New DataTable
Dim con As New SqlConnection(conecta.conecta_banco)
Dim SQL As String = [Ô]SELECT * from atividade WHERE atividade = [ô][Ô] & Atividade & [Ô][ô] and situacao = [ô]Ativado[ô] order by atividade asc[Ô]
Dim adaptador As New SqlDataAdapter(SQL, con)
Try
con.Open()
adaptador.Fill(tabela)
Catch ex As SqlException
MessageBox.Show(ex.Message, [Ô]Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
con.Close()
End Try
Return tabela
End Function
Like
Public Function Retorna_Dados_Atividade_Ativada(ByVal Ativ As String)
Dim conectar As SqlConnection
conectar = New SqlConnection()
conectar.ConnectionString = conecta.conecta_banco
Dim reader As System.Data.SqlClient.SqlDataReader
Dim cmd As System.Data.SqlClient.SqlCommand
cmd = New System.Data.SqlClient.SqlCommand([Ô]SELECT * from atividade WHERE atividade like [ô][Ô] & Ativ & [Ô]%[ô] order by atividade asc[Ô], conectar)
conectar.Open()
reader = cmd.ExecuteReader
While reader.Read
id_atividade = reader([Ô]id_atividade[Ô]).ToString
atividade = reader([Ô]atividade[Ô]).ToString
regiao = reader([Ô]regiao[Ô]).ToString
telefone = reader([Ô]telefone[Ô]).ToString
resp_ativ = reader([Ô]responsavel_Atividade[Ô]).ToString
End While
conectar.Close()
Return True
End Function
sabemos que se usarmos concatenação na query é uma abertura para invasoes alguem saberia me respoder copmo faço essa proteção usando um datatable, e um like
datatable
Public Function Buscar_Atividade_Ativada(ByVal Atividade As String) As DataTable
Dim tabela As New DataTable
Dim con As New SqlConnection(conecta.conecta_banco)
Dim SQL As String = [Ô]SELECT * from atividade WHERE atividade = [ô][Ô] & Atividade & [Ô][ô] and situacao = [ô]Ativado[ô] order by atividade asc[Ô]
Dim adaptador As New SqlDataAdapter(SQL, con)
Try
con.Open()
adaptador.Fill(tabela)
Catch ex As SqlException
MessageBox.Show(ex.Message, [Ô]Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
con.Close()
End Try
Return tabela
End Function
Like
Public Function Retorna_Dados_Atividade_Ativada(ByVal Ativ As String)
Dim conectar As SqlConnection
conectar = New SqlConnection()
conectar.ConnectionString = conecta.conecta_banco
Dim reader As System.Data.SqlClient.SqlDataReader
Dim cmd As System.Data.SqlClient.SqlCommand
cmd = New System.Data.SqlClient.SqlCommand([Ô]SELECT * from atividade WHERE atividade like [ô][Ô] & Ativ & [Ô]%[ô] order by atividade asc[Ô], conectar)
conectar.Open()
reader = cmd.ExecuteReader
While reader.Read
id_atividade = reader([Ô]id_atividade[Ô]).ToString
atividade = reader([Ô]atividade[Ô]).ToString
regiao = reader([Ô]regiao[Ô]).ToString
telefone = reader([Ô]telefone[Ô]).ToString
resp_ativ = reader([Ô]responsavel_Atividade[Ô]).ToString
End While
conectar.Close()
Return True
End Function
Use parâmetros em vez de concatenar strings que você fica seguro contra SQL Injection
eu consegu fazer com as outras operações somente com essas que nao consegui teria como vc me ajudar
Para usar parâmetros com LIKE você precisa fazer uma concatenação dento da SQL, do tipo
Dim sql as String = [Ô]SELECT Campo1, Campo2, CampoN FROM Tabela WHERE Campo1 LIKE [ô]%[ô] + @MeuParametro + [ô]%[ô] ORDER BY Campo1 ASC[Ô]
Repare que é apenas uma string sem concatenação nenhuma para o VB, porém quando a SQL for interpretada ela vai adicionar os % antes e depois do valor do parâmetro pois é feita a concatenação na própria SQL, pois provavelmente você já deve ter percebido que passando uma string com o % nela por parâmetro não funciona.
No seu caso ficaria mais ou menos assim
Dim sql as String = [Ô]SELECT Campo1, Campo2, CampoN FROM Tabela WHERE Campo1 LIKE [ô]%[ô] + @MeuParametro + [ô]%[ô] ORDER BY Campo1 ASC[Ô]
Repare que é apenas uma string sem concatenação nenhuma para o VB, porém quando a SQL for interpretada ela vai adicionar os % antes e depois do valor do parâmetro pois é feita a concatenação na própria SQL, pois provavelmente você já deve ter percebido que passando uma string com o % nela por parâmetro não funciona.
No seu caso ficaria mais ou menos assim
Dim cmd As System.Data.SqlClient.SqlCommand
cmd = New System.Data.SqlClient.SqlCommand([Ô]SELECT * from atividade WHERE atividade like @Ativ + [ô]%[ô] order by atividade asc[Ô], conectar)
cmd.Parameters.AddWithValue([Ô]@Ativ[Ô], Ativ)
conectar.Open()
obrigado pela resposta mais meu problema esta acontecendo no datatable não sei pelo oq substituir esse cara aqui
Dim adaptador As New SqlDataAdapter(SQL, con)
Dim adaptador As New SqlDataAdapter(SQL, con)
Citação::
obrigado pela resposta mais meu problema esta acontecendo no datatable não sei pelo oq substituir esse cara aqui
Dim adaptador As New SqlDataAdapter(SQL, con)
Use um DataReader...
valew carinha consegui resolver de outra forma grato pela atenção e pela informação
abraços
abraços
Citação::
obrigado pela resposta mais meu problema esta acontecendo no datatable não sei pelo oq substituir esse cara aqui
Dim adaptador As New SqlDataAdapter(SQL, con)
Não sabe substituir o que exatamente? Se o problema é passar os parâmetros para ele tem mais de uma alternativa, uma delas seria você criar um SqlCommand e usar o construtor que recebe o SqlCommand, outra é adicionar os parâmetros nele pela propriedade SelectCommand dele, algo do tipo
adaptador.SelectCommand.Parameters.AddWithValue([Ô]@Atividade[Ô], Atividade)
Tópico encerrado , respostas não são mais permitidas