我的代码是SQL注入证明吗?

时间:2016-12-30 05:00:49

标签: c# sql-server ado.net sql-injection

这是SQL注入证明吗?或者至少好吗?我在网上得到了这个,所以我真的可以使用一些帮助。我目前正在构建一个相当大的程序,如果我想让它付费,我决定添加一个登录页面。请帮忙!

if (txt_UserName.Text == "" || txt_Password.Text == "")
{
    MessageBox.Show("Please provide a Username and Password");
    return;
}

try
{
    // Create SqlConnection
    SqlConnection con = new SqlConnection(cs);

    SqlCommand cmd = new SqlCommand("Select * from tbl_Login where UserName = @username and Password = @password", con);

    cmd.Parameters.AddWithValue("@username", txt_UserName.Text);
    cmd.Parameters.AddWithValue("@password", txt_Password.Text);

    con.Open();

    SqlDataAdapter adapt = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    adapt.Fill(ds);

    con.Close();

    int count = ds.Tables[0].Rows.Count;

    // If count is equal to 1, than show frmMain form
    if (count == 1)

1 个答案:

答案 0 :(得分:3)

您的代码是SQL注入证明。对于 普通SQL查询 ,我个人喜欢使用StackOverflow中使用的Dapper ORM

它基本相同,但代码少得多,并且返回强类型值而不是DataSet。

例如,

public class User
{
    public string UserName { get; set; }
    public string Password { get; set; }
}

User user;
using (IDbConnection cnn = new SqlConnection(cs))
{
    user = cnn.Query<User>(
        "Select UserName, Password from tbl_Login where UserName=@username and Password=@password",
        new { username = txt_UserName.Text, password = txt_Password.Text })
        .SingleOrDefault();
}

if (user != null)
{
    // Do someting
}

仅供参考 :您似乎正在存储普通密码。如果是这样,那不是一个好习惯。相反,您希望存储盐渍哈希密码。