utilizando o cmd.Parameters.AddWithValue - consigo bloquear invasão por sql injection?

18/09/2013

0

Se sim, quais outras dicas vc podem dar de segurança, em post, Request.querystring..., ? ASP.Net com C# e MySQL.
Alexandre Alves

Alexandre Alves

Responder

Posts

18/09/2013

Joel Rodrigues

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

18/09/2013

Fernanda Acacia

um pergunta extremamente basica, para evitar sql injection é somente para sistemas web ou desktop tambem?
Responder

18/09/2013

Joel Rodrigues

Fernanda, qualquer sistema que utilize SQL está passível de sofrer injeção de SQL.
Responder

19/09/2013

Thiago Jesus

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!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar