ataque sql

18/05/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();

Regis

Respostas

18/05/2012

Fabio Rosa

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...
Responder Citar

18/05/2012

João Arthur

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

18/05/2012

Joel Rodrigues

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.
Responder Citar