如何利用通配符构造语句查询数据库?
【摘要】 首先我们要明确一下字符的使用机制,使用ESCAPE关键字定义转义符(通用)在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:WHERE ColumnA LIKE ‘%5/%%’ ESCAPE ‘/’。
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;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)