You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server全文检索CONTAINS()搭配Hibernate使用是否存在SQL注入风险?

问题分析结论

你给出的代码存在SQL注入漏洞,但风险不来自CONTAINS()方法本身,你当前对CONTAINS()第二个检索参数的预编译绑定用法是安全的,漏洞出在动态拼接column_name到SQL语句的操作。


详细拆解

  • userInput部分的处理是安全的:你用了?作为预编译占位符传递检索关键词,Hibernate会自动对传入的参数做转义处理,即使用户输入包含单引号、SQL关键字等恶意内容,也只会被当作普通字符串处理,不会被数据库当作SQL指令执行。
  • column_name部分的拼接存在注入风险:你直接把column_name变量用字符串拼接的方式写入SQL片段,如果这个变量的取值可控(比如来自前端传参、可被用户篡改),攻击者可以构造恶意的列名内容实现注入。举个简单的攻击示例:如果攻击者把column_name篡改为name); DELETE TABLE goods--,最终执行的SQL就会变为:
    CONTAINS(name); DELETE TABLE goods-- , ?)
    
    直接触发删表操作,造成严重的数据损失。

修复方案

如果业务确实需要动态指定全文检索的列:

  • 维护一个允许参与全文检索的列名白名单,每次使用前校验column_name是否在白名单内,不在的话直接拒绝请求
  • 不要直接把外部传入的列名字符串拼接到SQL中

内容的提问来源于stack exchange,提问作者pattabirmn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:54:03