EasyCVR利用通配符构造语句查询数据库如何实现?
EasyCVR作为视频协议融合平台,除了支持RTSP、GB28181等大众协议外,还支持海康SDK、大华SDK等私有协议,如今我们也支持了阿里的上云协议。在不久后,我们将把行人分析、车牌识别、人脸识别等功能都融入至EasyCVR平台。
在EasyCVR开发中,EasyCVR利用通配符构造语句查询数据库,从而导致拒绝服务等问题。
我们调用接口进行了测试,调取设备查询接口q字段加入 % 通配符会导致服务关闭失去链接。
http://127.0.0.1:18000/api/v1/channels?device=2&start=0&limit=24&q=%
首先我们要明确一下字符的使用机制,使用ESCAPE关键字定义转义符(通用)在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:WHERE ColumnA LIKE ‘%5/%%’ ESCAPE ‘/’。
在方括号 ([ ]) 中只包含通配符本身,或要搜索破折号 (-) 而不是用它指定搜索范围,请将破折号指定为方括号内的第一个字符。例如:
所以在此问题中,对输入参数的关键字过滤后,还需要做下面转换确保LIKE的正确执行,代码参考如下:
private static string ConvertSqlForLike(string sql)
{
sql = sql.Replace("[",
"[[]");
// 这句话一定要在下面两个语句之前,否则作为转义符的方括号会被当作数据被再次处理
sql = sql.Replace("_",
"[_]");
sql = sql.Replace("%",
"[%]");
returnsql;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具