请教下各位前辈,为啥用字符串凭借就不能防止注入额?
结果不都是拼接成SQL语句吗?
你用的driver可不是把sql当做字符串传到server的,预编译过了, column都定了,你再怎么注入也最多改变column的值
请看 占位符,SQL注入? ,说的比较好,给你解析了jdbc包怎么去做的占位符解析
查查parameter方式的原理。。。
直接拼接是没有做检查的,变量替换是有做检查的。
虽然你没写,但是在连接驱动里面有过滤处理的
这是用到了prepare statement
的方式,SQL已经预编译好了,然后替换中间的占位符,这个占位符在编译后就已经确定了它只是一个参数属性。
因此,你用注入的代码去替换占位符,这个SQL也不会再进行编译了,所以也达不到注入的目的。