zoukankan      html  css  js  c++  java
  • 什么是预编译,为什么预编译能防止SQL注入?

    一、什么是预编译?

    预编译是做些代码文本的替换工作。是整个编译过程的最先做的工作

     通过上面的解释可能还是不太理解预编译,通俗简单的说在程序真正执行一段代码之前,我们对要执行的代码做一些特定的处理,来达到我们后期所想要达到的一个效果

    二、为什么预编译能防止SQL注入?

    在知道为什么预编译能防止SQL注入时,我们先来看一个例子:

    使用sql拼接:"select * from user where username = ' " + username + " ' ";

    页面上可能会有个输入框:用户名:________________________

    如果有人这么填:用户名:___hello'; delete from user where id='1__最终的Sql就是 "select * from user where username = 'hello'; delete from user where id='1' ";

    Sql注入就发生了,不仅仅会返回你想要的用户信息,还会删除id为1的用户;与代码预期的逻辑不一致

    使用prepareStatement
    Sql发送到服务器大致会有如下流程:

    1. 解析阶段
    2. 编译阶段
    3. 优化阶段
    4. 缓存阶段
    5. 执行阶段

    PrepareStatement发送到服务器后会经历上述1、2、3、4过程,PrepareStatement并不是完整的sql语句,在执行之前还需要进行用户数据替换。在填入用户数据时,PrepareStatement已经经历了上述过程,就不会重新编译,用户的数据只能作为数据进行填充,而不是sql的一部分。服务器从缓存中获得已经编译优化后的语句,替换掉用户数据执行,避免了sql注入

    冰冻三尺,并非一日之寒
  • 相关阅读:
    我的周记17——“世界再美,也美不过我一日三餐,心情再坏,也坏不过我没心没肺”
    【测试-移动端】 聊聊手机端的测试
    Java基础篇---多线程
    BIO和NIO实现文件复制
    IO操作-BIO
    js数组去重
    js json对象操作
    23种设计模式,每天一种设计模式(2)
    23种设计模式,每天一种设计模式
    .net画二叉树
  • 原文地址:https://www.cnblogs.com/qjwcf/p/14315857.html
Copyright © 2011-2022 走看看