我正在构建一个Web应用程序(asp.net& c#), 我想将它连接到db(我正在构建),并且我正在寻找有关连接db并安全地执行它的教程\书(避免sql注入)。 我的查询非常简单而且不复杂。
我读了一些关于存储过程,预处理语句,LiNQ的内容 这一切都让我很困惑。
有人能指出我在哪里阅读该怎么做?
答案 0 :(得分:3)
在ASP.NET中访问数据库与在任何.NET应用程序中访问数据库没有什么不同,因为ASP.NET是一个.NET应用程序。在.NET中访问关系数据库的方法是使用ADO.NET。
只要您使用参数化查询,就可以安全地防止SQL注入。我们以SQL Server为例:
string firstname = "John";
using (var conn = new SqlConnection("Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;"))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT lastname FROM mytable WHERE firstname = @firstname;";
cmd.Parameters.AddWithValue("@firstname", firstname);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string lastName = reader.GetString(0);
// do something with the value
}
}
}
现在与以下内容进行比较(错误代码):
string firstname = "John";
using (var conn = new SqlConnection("Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;"))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT lastname FROM mytable WHERE firstname = '" + firstname + "';";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string lastName = reader.GetString(0);
// do something with the value
}
}
}
这第二个例子很糟糕,容易受到SQL注入攻击。因此,基本上每次在构建查询字符串时使用+
运算符都是错误的。
一旦你厌倦了编写所有这些SQL查询,你可以考虑使用ORM。随.NET一起提供的名为ADO.NET Entity Framework。
答案 1 :(得分:0)
这是一个非常广泛的问题。我建议您花一些时间使用Google来更好地理解ADO.NET作为起点。