这是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)
答案 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
}
仅供参考 :您似乎正在存储普通密码。如果是这样,那不是一个好习惯。相反,您希望存储盐渍哈希密码。