3种方法解决webp.net core sql语句注入。
2024-06-02 本文已影响0人
吉凶以情迁
sql注入举个简单的例子吧,假设这是一个查询功能,我现在想忽略where直接查询所有,那么下面是示范案例
假如代码是
[HttpPost("x")]
public string xxxx(string name){
string sql=$"select * from table1 where name='{name}'";
sqlexec.exec(sql);
}
那么注入 允许任何条件就是输入
' or '' ='
防注入法1:
执行sql,不改成拼接,而是使用@
+参数化 ,如果已经写了很多了,此时再改起来也麻烦,由于基于目前的环境是内网环境使用,故暂时不需要重构全部升级此代码。
string connectionString = "your_connection_string";
string queryString = "SELECT * FROM Users WHERE Username = @Username";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Parameters.AddWithValue("@Username", "some potentially unsafe input"); // 假设这是从用户输入获取的
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// ... 处理查询结果 ...
}
catch (Exception ex)
{
// 处理异常
}
}
方法2:
使用Entity Framework Core,很显然此法侵入性太强,需要改动原有很多东西,无法一刀切。
var name = "some potentially unsafe input"; // 假设这是从用户输入获取的
var users = _context.Users.Where(u => u.Name == name).ToList();
防止注入法3 ,中间件 检查,在请求之前检查get ,post参数,我比较偷懒 方法1 ,2 对我来说太过麻烦。频繁使用显然太繁琐了。
方法3: