utilizando o cmd.Parameters.AddWithValue - consigo bloquear invasão por sql injection?
Se sim, quais outras dicas vc podem dar de segurança, em post, Request.querystring..., ? ASP.Net com C# e MySQL.
Alexandre Alves
Curtidas 0
Respostas
Joel Rodrigues
18/09/2013
Sim, consegue evitar SQL Injection, pois os tipos dos parâmetros são adequados aos tipos das colunas e a instrução SQL fica por conta do ADO.NET.
Além disso, uma boa prática é efetuar validações, inclusive usando RegEx.
Além disso, uma boa prática é efetuar validações, inclusive usando RegEx.
GOSTEI 0
Fernanda Acacia
18/09/2013
um pergunta extremamente basica, para evitar sql injection é somente para sistemas web ou desktop tambem?
GOSTEI 0
Joel Rodrigues
18/09/2013
Fernanda, qualquer sistema que utilize SQL está passível de sofrer injeção de SQL.
GOSTEI 0
Thiago Jesus
18/09/2013
Se sim, quais outras dicas vc podem dar de segurança, em post, Request.querystring..., ? ASP.Net com C# e MySQL.
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