关于prepareStatement可以防止SQL注入的理解

关于prepareStatement可以防止SQL注入的理解prepareStatement的两个作用:1.预处理功能,在多次执行相同的SQL语句的情况可以大幅提高执行效率;2.杜绝SQL注入的风险。

大家好,又见面了,我是你们的朋友全栈君。

prepareStatement的两个作用:

1. 预处理功能,在多次执行相同的SQL语句并且只是更换了参数(例如表名,字段名)的情况可以大幅提高执行效率;

例如: 

    select name from table_student.

    select sex from table_student.

    select number from table_teacher.

类似的语句多次执行,这样的情况就可以通过preparestatement简化为select ? from ?,然后后面填参数替换掉符号?   当然这只是提高效率,重点介绍第二条。

2. 杜绝SQL注入的风险

简单介绍一下SQL注入的原理:

关于prepareStatement可以防止SQL注入的理解

那么我们如何防止呢,prepareStatement的作用就是将上图中的 Name, Password, Corp参数化处理,那么就要将服务器端代码改为如下的样子:

    String sql = “select * from Table where name =? and Password = ? and Corp = ? “;  

    PreparedStatement prep = conn.prepareStatement(sql);  

    prep.setString(1, name_input);  

    prep.setString(2, pwd_input);  

    prep.setString(3, corp_input);  

    ResultSet rst = prep.executeQuery();  

原理,SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析和编译,对应的执行计划也会缓存下来,之后数据库就会以参数化的形式进行查询。

当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如上图中 or ‘1=1’,它也会作为一个字段的值来处理,而不会作为一个SQL指令。

从根本上讲,其实就是data VS. code的问题,确保data永远是data,不会是可执行的code,就永远的杜绝了SQL注入这种问题。

参考博客:

http://blog.csdn.net/chenleixing/article/details/44024095

http://blog.csdn.net/daijin888888/article/details/50965232

https://www.cnblogs.com/hkncd/archive/2012/03/31/2426274.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140851.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm如何分段运行_pycharm只运行部分代码

    pycharm如何分段运行_pycharm只运行部分代码在最新版的pycharm中拥有类似jupyter的分段执行代码功能,其使用方法如下:1.在想要分段运行的段前一行(空白行)输入#%%2.选择Usescientificmode3.分段运行的结果补充知识:Pycharm分行或分块执行介绍Pycharm中其实也可以使用类似于Spyder和Jupyter中的分行或分块执行,主要可以使用两种方法。需要注意的是,下面两种方法的本质都是在控制台执行,要注意…

    2022年8月26日
    50
  • dpkg配置包出错_dpkg-reconfigure

    dpkg配置包出错_dpkg-reconfigure2021-10-18by崔斐然dpkg:处理软件包xxx(–configure)时出错解决方法来源:https://blog.csdn.net/jf_xu/article/details/82285008dpkg:处理软件包libicu-dev(–configure)时出错:依赖关系问题-仍未被配置dpkg:依赖关系问题使得libxml2-dev:amd64的配置工作不能继续:libxml2-d…

    2022年10月7日
    0
  • linux修改文件权限的命令_chmod递归修改目录权限

    linux修改文件权限的命令_chmod递归修改目录权限当在ubuntushell下键入ls-lh时,会列出该目录下的文件,如:而每个文件显示前都有类似红框里的内容,这些东西代表的含义是:-代表文件d代表目录,也就是文件夹之后有三组字符的编码,每一组定义了3种访问权限r代表对象是可读的w代表对象是可写的x代表对象是可执行的若没有某种权限,在该权限为会出现单破折线,这三组权限分别…

    2022年9月12日
    0
  • v-if与v-show的区别

    v-if与v-show的区别相同点:v-if与v-show都可以动态控制dom元素显示隐藏不同点:v-if显示隐藏是将dom元素整个添加或删除,而v-show隐藏则是为该元素添加css–display:none,dom元素还在。都修改为false后,第一个div是直接被移除掉了需要注意的是,当一个元素默认在css中加了display:none属性,这时通过if-show修改为true是无法让元素显示的。…

    2022年6月13日
    29
  • quartz定时任务使用(quartz定时任务原理)

    packagecom.jeeplus.common.utils;importjava.util.Map;importorg.quartz.CronScheduleBuilder;importorg.quartz.CronTrigger;importorg.quartz.Job;importorg.quartz.JobBuilder;importorg.quartz….

    2022年4月17日
    86
  • python hashlib_python加密之hashlib[通俗易懂]

    python hashlib_python加密之hashlib[通俗易懂]1、强大的hashlib,提供了用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法2、hmac模块实现了hmac算法,需要一个key来进行加密,提供更为强大的加密,不过需要提供key,也就是通常说的盐3、使用hashlib.algorithms_available,可以查看hashlib提供的加密算法…

    2022年4月29日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号