Я недавно начал изучать SQL-инъекцию, поэтому извините меня, если я делаю очевидную ошибку. У меня есть запрос, который возвращает определенные поля из базы данных. Я пытаюсь параметрировать его сейчас, поэтому я могу избежать SQL-инъекции. Мой код нижеПараметрированный запрос выбора возвращает пустые строки
protected string UserInfo()
{
string UsrName = User.Identity.Name;
using (SqlConnection connection = new SqlConnection(Common.ConnectionString))
{
UserDetail det = new UserDetail();
using (SqlCommand cmd = new SqlCommand("select [email protected],[email protected],[email protected],[email protected] from Users,OtherInfo where OTID = USERID AND [email protected]"))
{
cmd.Parameters.AddWithValue("UserName", UsrName); // Works correctly for this
cmd.Parameters.AddWithValue("@fn" det.FirstName);
cmd.Parameters.AddWithValue("@ln" det.FirstName);
cmd.Parameters.AddWithValue("@mn" det.FirstName);
cmd.Parameters.AddWithValue("@ea" det.FirstName);
cmd.Connection = connection;
connection.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
reader.Read();
info.FirstName = reader["FirstName"].ToString();
info.LastName = reader["LastName"].ToString();
info.TelNum = reader["MobileNumber"].ToString();
info.Email = reader["EmailAddress"].ToString();
}
}
}
}
UserDetail
My обладает следующими свойствами:
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string TelNum { get; set; }
Но это только кажется, вернуться null
значения? Кто-нибудь знает, где я ошибаюсь?
Разве это не делает запрос уязвимыми для SQL инъекций? – Code
№. Поля поступают из базы данных, которая является безопасной. Вам нужно только беспокоиться о том, что происходит (например, 'UserName' в вашем коде), а не о том. –
Спасибо за ответ и дальнейший совет по sql-инъекции :) – Code