使用ASP.net保存用户代理时避免SQL注入
我正在保存我的用户的浏览器用户代理以用于统计 正如您已经知道的,可以修改用户代理。我想知道我是否应该采取措施防止SQL注入 我正在使用存储过程来插入使用ASP.net保存用户代理时避免SQL注入,asp.net,sql-injection,Asp.net,Sql Injection,我正在保存我的用户的浏览器用户代理以用于统计 正如您已经知道的,可以修改用户代理。我想知道我是否应该采取措施防止SQL注入 我正在使用存储过程来插入 非常感谢。使用事先准备好的声明。确保对所有SQL操作使用准备好的语句,即使数据来自数据库。或 以下是MSDN中的示例: SqlDataAdapter dataAdapter = new SqlDataAdapter( "SELECT CustomerID INTO #Temp1 FROM Customers " +
非常感谢。使用事先准备好的声明。确保对所有SQL操作使用准备好的语句,即使数据来自数据库。或 以下是MSDN中的示例:
SqlDataAdapter dataAdapter = new SqlDataAdapter(
"SELECT CustomerID INTO #Temp1 FROM Customers " +
"WHERE CustomerID > @custIDParm; SELECT CompanyName FROM Customers " +
"WHERE Country = @countryParm and CustomerID IN " +
"(SELECT CustomerID FROM #Temp1);",
connection);
SqlParameter custIDParm = dataAdapter.SelectCommand.Parameters.Add(
"@custIDParm", SqlDbType.NChar, 5);
custIDParm.Value = customerID.Text;
SqlParameter countryParm = dataAdapter.SelectCommand.Parameters.Add(
"@countryParm", SqlDbType.NVarChar, 15);
countryParm.Value = country.Text;
connection.Open();
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
谢谢你,我忘了告诉你我已经在使用带参数的SP。如果你按照第一个链接中的模式操作,那么你应该是安全的。将参数构建到查询中的参数汇编代码应正确编码输入,以防止SQL注入。(这是更好的解决方案。)谢谢,唯一的问题是,我使用的用户代理的最大长度为512字节。您认为这可能是个问题吗?只需确保数据库架构允许您期望的长度,并检查以确保给定的输入不超过架构允许的长度。谢谢。你说预处理语句是什么意思?我想他和参数化查询的意思是一样的。