关于SQL注入,为何用占位符就可以防止注入额?


请教下各位前辈,为啥用字符串凭借就不能防止注入额?
结果不都是拼接成SQL语句吗?

hibernate sql sql注入 mybatis

烫手的肥皂 10 years, 6 months ago

你用的driver可不是把sql当做字符串传到server的,预编译过了, column都定了,你再怎么注入也最多改变column的值

节操能吃否 answered 10 years, 6 months ago

虽然你没写,但是在连接驱动里面有过滤处理的

*′詤訁゜. answered 10 years, 6 months ago

直接拼接是没有做检查的,变量替换是有做检查的。

阿求阿求阿求 answered 10 years, 6 months ago

查查parameter方式的原理。。。

 坂上智代 answered 10 years, 6 months ago

这是用到了 prepare statement 的方式,SQL已经预编译好了,然后替换中间的占位符,这个占位符在编译后就已经确定了它只是一个参数属性。

因此,你用注入的代码去替换占位符,这个SQL也不会再进行编译了,所以也达不到注入的目的。

讲道理啊喵 answered 10 years, 6 months ago

请看 占位符,SQL注入? ,说的比较好,给你解析了jdbc包怎么去做的占位符解析

无限上升气流君 answered 10 years, 6 months ago

Your Answer