Array
(
)

ataque sql

Regis
   - 18 mai 2012

Olá Galera
Como se faz isso de um modo seguro
Estou mostrando a baixo a maneira como é feita a conexao , o metodo para retornar em um list ou table e a chamada do metodo no webform, porem o que me preocupada é a chamada do metodo pois passar um comando sql por parametro me parece nao ser seguro.Ao mesmo tempo que passo um select * from tabela alguem pode passar outro comando pela textbox como um drop table ou delete table
--Classe para conexao com o banco sqlserver 2008
public class Conexao
{

private string _Conexao;
private SqlDataSource _Sql;

public Conexao()
{
_Conexao = Data Source=database.sytes.net;Initial Catalog=dbjava;Persist Security Info=True;User ID=UserSelect;Password=senha;
_Sql = new SqlDataSource();
_Sql.ConnectionString = _Conexao;

}

--Metodos de retorno
public DataTable Selecionar(string sql)
{
SqlConnection conexao = new SqlConnection(_Conexao);
SqlCommand comando = conexao.CreateCommand();
comando.CommandText = sql;
SqlDataAdapter adaptador = new SqlDataAdapter(comando);
DataTable tabela = new DataTable();
conexao.Open();
adaptador.Fill(tabela);
conexao.Close();
return tabela;
}

chamada no webform que retorna a tb_cidades
Conexao strcon = new Conexao();
GridView1.DataSource = strcon.Selecionar(select * from tb_Cidade);
GridView1.DataBind();

Fabio Rosa
   - 18 mai 2012

Você precisa dar toda a versatilidade para o usuário, permitindo comando SQL no WebForm?
Caso não, você pode criar um método específico para retornar Cidades por exemplo e o comando SQL pode ser fixo dentro deste método, assim o usuário não tem que digitar nenhum comando, e sim apenas clicar em um botão...

João Arthur
|
MVP
Pontos: 700
    18 mai 2012

acho que passando parametro é uma forma segura para evitar sql injection, agora concatenando setenças sql ai é perigoso

Joel Rodrigues
   - 18 mai 2012

Cara, como disse o Fabio acima, considere o uso de métodos específicos. Tipo: Cidade.GetCidade(); Pessoa.ListarPessoas(string nome). E Por aí vai.