• 技术文章 >数据库 >mysql教程

    预编译为什么可以防止sql注入

    清浅清浅2019-05-11 14:55:57原创4210
    预编译可以防止sql注入的原因:进行预编译之后,sql语句已经被数据库分析,编译和优化了,并且允许数据库以参数化的形式进行查询,所以即使有敏感字符数据库也会当做属性值来处理而不是sql指令了

    php入门到就业线上直播课:进入学习

    大家都知道,java中JDBC中,有个预处理功能,这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。

    用法就是如下边所示:

    String sql="update cz_zj_directpayment dp"+
     "set dp.projectid = ? where dp.payid= ?";
    try {
    PreparedStatement pset_f = conn.prepareStatement(sql);
    pset_f.setString(1,inds[j]);
    pset_f.setString(2,id);
    pset_f.executeUpdate(sql_update);
    }catch(Exception e){
    //e.printStackTrace();
    logger.error(e.message());
    }

    那为什么它这样处理就能预防SQL注入提高安全性呢?其实是因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库以参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了SQL注入的作用了!

    以上就是预编译为什么可以防止sql注入的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    千万级数据并发解决方案(理论+实战):点击学习

    Mysql单表千万级数据量的查询优化与性能分析

    Mysql主从原理及其在高并发系统中的应用

    专题推荐:预编译 sql注入
    上一篇:如何彻底删除sql2008 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• mysql如何防止sql注入• 如何防范sql注入• 什么是sql注入漏洞
    1/1

    PHP中文网