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:

上一篇 下一篇

猜你喜欢

热点阅读