关于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 联盟链初识以及Fabric环境搭建流程

    联盟链初识以及Fabric环境搭建流程

    2021年6月17日
    112
  • vsftp简介[通俗易懂]

    vsftp简介[通俗易懂]一、简介FTP(文件传输协议)全称是:VerySecureFTPServer。Vsftpd是linux类操作系统上运行的ftp服务器软件。vsftp提供三种登陆方式:1.匿名登录2.本地用户登录3.虚拟用户登录vsftpd的特点:1.较高的安全性需求2.带宽的限制3.创建支持虚拟用户4.支持IPV65.中等偏上的性能6.可分…

    2022年9月24日
    4
  • Linux下安装libiconv

    Linux下安装libiconv1、下载libiconv库wgethttp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz2.解压,然后进入解压后的目录tarzxvflibiconv-1.13.1.tar.gz&&cdlibiconv-1.13.13.配置libiconvsudo./configure–prefix=/usr/local或者sudo./configure–prefix=…

    2025年8月12日
    5
  • C语言read函数

    C语言read函数从文件中读取指定大小的字节函数read()语法:ssize_tread(intfd,void*buf,intcount)说明:read函数从指定的打开的文件fd中读取指定大小count的字节到从buf开始的缓冲区中.返回值:若读取失败则返回-1.读取成功则返回实际读取到的字节数,有两种情况:…

    2022年6月22日
    24
  • AnalyticDB for MySQL 3.0 技术架构解析

    AnalyticDB for MySQL 3.0 技术架构解析企业数据需求不断变化,近年来变化趋势日益明显,从数据的3V特性看:体积,速度和变化;BigData强调数据量,PB级以上,是静态数据。而FastData在数据量的基础上,意味着速度和和变化,意味着客户可以更加实时化、更加快速地进行数据处理。在Forrester最近的一项研究中,超过75%的…

    2025年12月12日
    3
  • 免费的私人代码托管(bitbucket) 和 常用git指令

    免费的私人代码托管(bitbucket) 和 常用git指令

    2022年3月3日
    36

发表回复

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

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