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


相关推荐

  • Excel中的VBA编程「建议收藏」

    Excel中的VBA编程「建议收藏」目的:有时我们需要对Excel文件中大量的数据进行整理,此时如果使用手动整理会非常繁琐而且容易出错。而如果采用VBA语言,在Excel中根据需求编写一段简单的代码就能自动完成大量数据的整理工作。以Excel2007为例,如果要进行VBA编程,需要启用“开发工具”选项。在Excel选项对话框中勾选【在功能区显示“开发工具“选项卡】复选框。基本语法:1、给当前工作表的

    2022年5月7日
    50
  • oracle 11g 安装闪退问题[通俗易懂]

    oracle 11g 安装闪退问题[通俗易懂]oracle安装时闪退问题今天碰到一个很奇怪的问题,在安装oralce11g时奇怪闪退,本地安装好好的,到服务器安装oralce就闪退,这个时候不要慌,先看看错误日志路径默认都会在C盘,这个是安装的日志C:\Users\用户名\AppData\Local\Temp\OraInstall2021-04-30_04-44-48PMUsingparamFile:C:\database\install\oraparam.iniCheckingmonitor:mustbec

    2022年7月25日
    120
  • Pytest(5)美化插件进度条pytest-sugar「建议收藏」

    Pytest(5)美化插件进度条pytest-sugar「建议收藏」前言在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。

    2022年8月6日
    6
  • 关于数据库读写分离

    1、what读写分离读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。2、why那么为什么要读写分离呢?因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。但是数据库的“读”(从oracle读…

    2022年4月6日
    43
  • 浮动广告代码

    浮动广告代码整个页面的代码如下:<%@PageLanguage=’vb’AutoEventWireup=’false’Codebehind=’floatadv.aspx.vb’Inherits=’

    2022年7月3日
    26
  • a pillar of salt_pinmode函数的作用

    a pillar of salt_pinmode函数的作用saltstack[4]-pillar用户变量自定义

    2022年4月20日
    60

发表回复

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

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