int id = int.Parse(Request.QueryString["id"]); string sql = "SELECT * FROM T_goods WHERE id = '"+ id +"'";哪里错了
时间: 2024-03-24 16:39:39 浏览: 58
这段代码可能存在 SQL 注入漏洞,应该使用参数化查询来避免。
假设输入的 id 参数为 "1' or 1=1--",那么生成的 SQL 语句将会变成:
```sql
SELECT * FROM T_goods WHERE id = '1' or 1=1--'
```
这个 SQL 语句将会查询出 T_goods 表中所有记录,因为 "1=1" 恒成立,"--" 是注释符,会忽略掉后面的所有内容。这就是 SQL 注入攻击的一种形式。
为了避免 SQL 注入攻击,应该使用参数化查询,例如:
```csharp
int id;
if (int.TryParse(Request.QueryString["id"], out id))
{
string sql = "SELECT * FROM T_goods WHERE id = @id";
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(sql, connection))
{
// 添加 id 参数,使用参数化查询
command.Parameters.AddWithValue("@id", id);
// 执行查询
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// 处理查询结果
}
}
}
else
{
// id 参数无效,进行错误处理
}
```
使用参数化查询可以将输入的参数与 SQL 语句分离,避免 SQL 注入攻击。
阅读全文