Fórum utilizando o cmd.Parameters.AddWithValue - consigo bloquear invasão por sql injection? #455710
18/09/2013
0
Alexandre Alves
Curtir tópico
+ 0Posts
18/09/2013
Joel Rodrigues
Além disso, uma boa prática é efetuar validações, inclusive usando RegEx.
Gostei + 0
18/09/2013
Fernanda Acacia
Gostei + 0
18/09/2013
Joel Rodrigues
Gostei + 0
19/09/2013
Thiago Jesus
Uma técnica válida é sempre utilizar Getters and Setters para acessar os dados da sua classe. Para operações SQL sempre utilize uma camada de acesso, por exemplo o padrão DAO.
Quando você trabalhar com Formulários Persistentes NUNCA realize operações SQL diretamente do formulário, pois se um TextBox estiver diretamente ligado a uma operação SQL é fácil de rodar SQL Injection, e isso não é apenas para .NET e sim para qualquer linguagem de programação.
Envie as informações do formulário para uma classe Model contendo Getters and Setters e a partir dai trabalhe com uma camada de acesso do tipo DAO.
Classe Model
Observação: Getters and Setters utilizando propriedades automáticas no C# é uma das coisas mais elegantes da linguagem
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Contatos
{
class LoginMODEL
{
public string Usuario { get; set; }
public string Senha { get; set; }
}
}
Classe DAO.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace Contatos
{
class LoginDAO
{
public Boolean Logar(LoginMODEL login) método público passar um objetos Model como parâmetro
{
Boolean resultado = false;
SqlConnection conn = new SqlConnection(@"Server =(LocalDB)\v11.0;Database = banco; Integrated Security = SSPI;");
SqlCommand sql = new SqlCommand("Select * from Usuarios Where " +
"Usuario = @usuario And Senha = @senha", conn);
sql.Parameters.AddWithValue("@usuario", login.Usuario); // Primeiro parâmetro recebe o conteúdo de login.Usuario
sql.Parameters.AddWithValue("@senha", login.Senha); // Segundo parâmetro recebe o conteúdo de login.Senha
conn.Open();
SqlDataReader reader = sql.ExecuteReader();
while (reader.Read())
{
resultado = true;
}
return resultado;
}
}
}
Este é um exemplo bem simples.
A plataforma .NET é maravilhosa!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)