mysql预编译还有办法注入么_数据库预编译为何能防止SQL注入?

Update一下,评论里我的回复可能是不正确的…

在使用PreparedStatement执行SQL命令时,命令会带着占位符被数据库进行编译和解析,并放到命令缓冲区。然后,每当执行同一个PreparedStatement语句的时候,由于在缓冲区中可以发现预编译的命令,虽然会被再解析一次,但不会被再次编译。

而SQL注入只对编译过程有破坏作用,执行阶段只是把输入串作为数据处理,不需要再对SQL语句进行解析,因此解决了注入问题。

因为SQL语句编译阶段是进行词法分析、语法分析、语义分析等过程的,也就是说编译过程识别了关键字、执行逻辑之类的东西,编译结束了这条SQL语句能干什么就定了。而在编译之后加入注入的部分,就已经没办法改变执行逻辑了,这部分就只能是相当于输入字符串被处理。

==========原答分割线

刚好这两天在学习这块的知识

《WEB应用安全权威指南》中是这样讲占位符的

书中附注中还有一句话,静态占位符在ISO或JIS中,也被称为预处理语句(Prepared Statement)。

其中提到绑定变量时字面量会被妥善处理指的是数据库引擎会将变量中的字符进行转义处理。

这有一篇关于数据库将变量进行转义的博文(是Java的处理方法),不过他转义后的字符串写错了,在博文的评论里有人指出了正确的转义后字符串。

书中后面也给了安全连接方法的参考

其余内容可参考这本书的相关章节。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值