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的正确执行,代码参考如下:
代码语言:javascript复制private static string ConvertSqlForLike(string sql)
{
sql = sql.Replace("[",
"[[]");
// 这句话一定要在下面两个语句之前,否则作为转义符的方括号会被当作数据被再次处理
sql = sql.Replace("_",
"[_]");
sql = sql.Replace("%",
"[%]");
returnsql;
}