SQL INJECTION

ROBFERREIRAA 11/07/2013 11:56:26
#425872
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
OCELOT 11/07/2013 12:08:00
#425874
Use parâmetros em vez de concatenar strings que você fica seguro contra SQL Injection
ROBFERREIRAA 11/07/2013 13:26:16
#425881
eu consegu fazer com as outras operações somente com essas que nao consegui teria como vc me ajudar
OCELOT 11/07/2013 13:33:52
#425885
Resposta escolhida
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 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()
ROBFERREIRAA 11/07/2013 13:46:26
#425889
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)

KERPLUNK 11/07/2013 13:53:15
#425891
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...
ROBFERREIRAA 11/07/2013 14:21:20
#425898
valew carinha consegui resolver de outra forma grato pela atenção e pela informação
abraços
OCELOT 11/07/2013 14:21:28
#425899
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