您的位置:首页 > 数据库

为什么preparestatement能够防止sql注入

2018-04-10 00:00 190 查看
1、preparestatement在程序第一次查询数据库之前sql语句就被数据库进行了分析、编译、优化以及具体的查询计划也都形成了。(参数位置使用占位符)

2、当程序真正发起查询请求时,这时传递过来的参数会被认为是某个字段的值,而不会重新编译、优化,所以它不会被认为是一个sql指令。

3、如果传递进来的参数无法被看作是sql指令那么就无法形成sql注入了。如 or '1=1' 这样的参数不会被看成or指令,而是某个字段的字符串类型的值。

4、正是因为sql的执行计划是在sql编译、优化之后形成的,所以说sql注入只在编译阶段起作用。该解决方式就是不让参数参与编译阶段,而是使用占位符代替,从而解决了sql注入问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息