jdbc,prepareStatement,表名为变量时无法使用占位符‘?’

java操作有些数据库比如clickhouse暂时还用的是jdbc,执行sql时面临使用statement还是prepareStatement,其中statement写的简单不过会有sql注入最后安全检查不过。prepareStatement就不会,因为使用了占位符,?,像myBatis也是占位符,就不会有sql注入。

不过?只能替换值,不能替换表名。比如select * from ? where id = '1', 执行prepareStatement结果是不对的。诸多原因,编译上的,还有?其实两边默认有单引号。那如何prepareStatement使用占位符替换表名呢?

答案简单的说,没有!

参考sql - How to use a tablename variable for a java prepared statement insert - Stack Overflow

java - How to prevent SQL injection when the statement has a dynamic table name? - Stack Overflow

不要试图用啥单引号替换,string拼接啥的,要么做不到要么无法避免sql注入。

结论就是只能用白名单,检查表名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值