什么是预处理?防SQL注入的原理?使用预处理防止被恶意注入

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍什么是预处理?防sql注入的原理?使用预处理防止SQL被恶意注入简单知识以及部分理论知识


🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


目录

⭐什么是预处理?

⭐防SQL注入的原理

🍧1、防恶意代码注入的原理

🍧2、模仿恶意代码注入SQL语句

⭐使用预处理防止SQL被恶意注入


⭐什么是预处理?

预处理指的是在代码执行前对一些变量或数据进行处理,以提高程序的性能和安全性。在编程中,预处理通常指在程序运行时之前对一些代码进行编译或解析,以减少运行时的开销。

SQL预处理是指在执行SQL语句之前,先将SQL语句中的参数和变量转换为占位符(即 " ?"),然后将该语句发送给数据库。当要执行该语句时,再将具体的参数值替换占位符,再发送给数据库执行。这种方式可以大大降低SQL注入的风险,并且提高SQL执行的效率

⭐防SQL注入的原理

🍧1、防恶意代码注入的原理

SQL注入是指攻击者通过在Web应用程序中注入恶意SQL代码,从而导致数据库执行恶意的SQL语句。为了防止SQL注入,可以采用以下原理:

  • 1、使用参数化查询或预处理语句。将SQL语句中的参数用占位符表示,然后将实际参数值与占位符绑定。这样可以防止攻击者在参数值中注入恶意的SQL代码。
  • 2、过滤用户输入。对于用户输入的数据进行过滤,去除或转义可能含有SQL注入代码的特殊字符,如单引号、双引号、分号等等。
  • 3、限制权限。给数据库用户授权时,应该根据其需求来分配最小权限,防止攻击者通过注入的SQL语句获取敏感数据。
  • 4、验证用户输入。在Web应用程序中对用户输入进行验证,确保输入的数据类型、长度、格式等符合要求。
  • 5、使用防火墙。使用Web应用程序防火墙(WAF)来监控和拦截恶意SQL注入请求。WAF可以识别恶意的SQL语句,并对其进行阻止或警告。

采用上述措施可以有效地防止SQL注入攻击,保护Web应用程序和数据库的安全。

🍧2、模仿恶意代码注入SQL语句

如果用户输入 "任意值" or "1"="1" 作为变量的值,在不使用预处理语句的情况下,SQL语句可能会变成类似这样的形式:

SELECT * FROM users WHERE username=''任意值' or '1'='1'' AND password='$password';

由于 OR 运算符的优先级比 AND 运算符低,所以上面的语句相当于:

SELECT * FROM users WHERE (username=''任意值') OR ('1'='1' AND password='$password');

由于 '1'='1' 总是为真,所以这个条件将匹配所有的记录,返回所有的用户记录。这就是SQL注入攻击的一种形式。而使用预处理语句,即使传递了 '任意值' or '1'='1' 作为参数值,生成的SQL语句也只是将该字符串作为参数值传给占位符,而不会对SQL代码造成任何影响,因此可以避免SQL注入攻击。

package jdbc;import java.sql.*;public class dome2 {public static void main(String[] args) throws ClassNotFoundException, SQLException {//1、加载及注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2、创建连接字符String url = "jdbc:mysql://127.0.0.1:3306/1127douyinDB";String username = "root";String password = "root";Connection con = DriverManager.getConnection(url,username,password);//3、创建连接对象Statement sta = con.createStatement();  //新增//4、编写sql语句//注意注意注意!!!“'任意值' or '1'='1'”这段代码String sql = "update douyin set income =150000 where liveStreaming = '任意值' or '1'='1'";//5、执行命令int row = sta.executeUpdate(sql); //增删改都可以用这个//6、处理结果if (row >0){System.out.println("修改操作成功!");}else {System.out.println("修改操作失败!");}//7、关闭资源con.close();con.close();}
}

在以上示例中,使用了  ' 任意值 '  or  '1'='1'   的方法恶意注入了SQL语句, 恶意用户输入 '任意值' or '1'='1',进行对SQL语句注入 从而影响最终结果。

⭐使用预处理防止SQL被恶意注入

使用预处理语句可以有效地防止SQL注入攻击,具体步骤如下:

1、创建一个预处理语句对象。

2、编写SQL语句,并使用参数占位符代替实际参数。如:SELECT * FROM users WHERE username=? AND password=?;

3、绑定参数值。将实际的参数值与参数占位符绑定,以防止恶意代码的注入。

4、执行预处理语句。执行语句时,数据库会将编译好的SQL语句与参数值组合,形成一条完整的SQL语句,然后执行该语句。

以下是使用预处理语句防止SQL注入的示例代码:

package jdbc;import java.sql.*;public class dome3 {public static void main(String[] args) throws ClassNotFoundException, SQLException {//1、加载及注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2、创建连接字符String url = "jdbc:mysql://127.0.0.1:3306/1127douyinDB";String username = "root";String password = "root";Connection connection = DriverManager.getConnection(url,username,password);//3、定义sql语句String sql = "update douyin set income = ? where liveStreaming = ?";//输入String income = "1000";String liveStreaming = "小杨哥";//4、创建预处理对象PreparedStatement prepar = connection.prepareStatement(sql);prepar.setString(1,income);prepar.setString(2,liveStreaming);//5、执执行预处理对象int row = prepar.executeUpdate(); //预处理//6、处理结果if (row >0){System.out.println("修改成功!");}else {System.out.println("修改失败!");}//Statement和Connection对象(后开先关)prepar.close();connection.close();}
}

在以上示例中,使用了 mysql预处理语句的对象和方法,首先使用 prepare() 方法创建预处理语句对象。在 SQL 语句中使用 ? 代替真实的参数,然后使用方法将实际参数值与参数占位符绑定,最终生成的SQL语句也只是将该字符串作为参数值传给占位符,而不会对SQL代码造成任何影响。

总结不易,希望uu们不要吝啬亲爱的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/185119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程05

前言 前面我们说到了死锁以及线程可见性的问题 我们将线程可见性主要归结于是JVM自身的一个bug 一个线程写一个线程读 会将一直不变的变量优化到直接从寄存器中读取,而不是缓存等读取,因为这样我们就设置了使用volatile关键字使得用到这个变量的时候必须从内存中读取数据 死锁主…

项目终验的exce表格缩放,排版等经常使用

xxx个项目的验收资料 1.申请表等等很多信息 需求:放在一页内等办法 上述文档,在excel表格打印预览中都是在两页中,很难调节,这个时候采用wps专业版本即可。 wps排版经常使用的功能如下: 经常使用的是 1.把所有列打印…

const 和 constexpr 深入学习

在 C 中,const 和 constexpr 都可以用来修饰对象和函数。修饰对象时,const 表示它是常量,而 constexpr 表示它是一个常量表达式。常量表达式必须在编译时期被计算1。修饰函数时,const 只能用于非静态成员的函数,而 con…

WPF窗口样式的比较

WPF窗口样式的比较 1.WPF默认Window窗口 带有图标 标题栏 最小最大化推出按钮 <Window x:Class"GlowWindowDemo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006…

nginx: [alert] could not open error log file

先把cmd的报错信息粘出来 nginx: [alert] could not open error log file: CreateFile() “logs/error.log” failed (3: The system cannot find the path specified) 2023/11/29 11:27:37 [emerg] 5040#18772: CreateDirectory() “D:\enviroment\nginx-1.24.0\conf/temp/cli…

Linux学习笔记09、Shell命令之历史命令和自动补全

上一篇&#xff1a;Linux学习笔记08、Shell命令之常用命令缩写及全称 目录 1、历史命令&#xff1a; 1.1、查看所有历史命令列表&#xff1a; 1.2、查看指定历史命令&#xff1a; 1.3、清除历史命令&#xff1a; 2、自动补全 2.1、当字符串唯一时&#xff1a; 2.2、当有多个…

力扣题:字符的统计-11.25

力扣题-11.25 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;387. 字符串中的第一个唯一字符 解题思想&#xff1a;直接遍历即可 class Solution(object):def firstUniqChar(self, s):""":type s: str:rtype: int""&qu…

机器学习——决策树

1.决策树 2.熵&#xff08;不确定程度&#xff09; 3.信息增益 & 信息增益比 3.1 信息增益 & 信息增益比 的 概念 3.2 案例解释说明 &#xff13;.&#xff12;.&#xff11;数据集说明 &#xff13;.&#xff12;.&#xff12;计算 &#xff14;&#xff0e;&#x…

智能井盖传感器怎么监测井盖出现倾斜?

智能井盖传感器是一种先进的智能设备&#xff0c;能够二十四小时连续监测井盖是否出现倾斜。其工作原理主要是依靠内置的传感器&#xff0c;以及搭载的MEMS“芯”技术。便于智能井盖传感器实时感知到井盖的姿态变化&#xff0c;一旦发现有倾斜的现象&#xff0c;就会立即向运维…

Jmeter之压力测试总结!

一、基本概念 1.线程组N&#xff1a;代表一定数量的并发用户&#xff0c;所谓并发就是指同一时刻访问发送请求的用户。线程组就是模拟并发用户访问。 2.Ramp-Up Period(in seconds)&#xff1a;建立所有线程的周期&#xff0c;就是告诉jmeter要在多久没启动所有线程&#xff…

python+pytest接口自动化(5)-requests发送post请求

简介 在HTTP协议中&#xff0c;与get请求把请求参数直接放在url中不同&#xff0c;post请求的请求数据需通过消息主体(request body)中传递。 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式&#xff0c;所以其请求数据可以有不同的编码方式&#xff0c;服务…

elasticsearch安装分词器插件

查看插件安装情况 elasticsearch-plugin list 插件在线安装 bin/elasticsearch-plugin install analysis-icu 离线安装ik分词 cd plugins wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip unzi…

Wireshark之Intro, HTTP, DNS

源码地址&#x1f447; moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES: 《计算机网络&#xff0d;自顶向下方法(原书第6版)》编程作业&#xff0c;Wireshark实验文档的翻译和解答。 (github.com) 目录 &#x1f33c;Introduce &#x1f3a7;前置 &#x1f3a7;过…

智能电子墨水屏价签系统版

无线2.4G通信&#xff0c;加密的交流&#xff0c;穿透力强&#xff0c;不惧障碍 自定义双向通信协议&#xff0c;安全可靠 海量模板随意切换&#xff0c;模板也可自行DIY设计 远程批量管理&#xff0c;多店铺管理 超低功耗&#xff0c;常规可持续使用5年 工作温度范围&…

[新人向]MySQL和Navicat下载、安装及使用详细教程

MySQL和Navicat下载和安装及使用详细教程 因为这些软件的安装很多都是纯英文&#xff0c;作为新手安装真的需要摸索好久&#xff0c;包括我自己&#xff0c;所以Pipi酱就把自己的经验分享给大家~ MySQL的安装教程 一、下载安装包链接&#xff1a; 1.下载MySQL&#xff1a;ht…

Python MD5加密的三种方法(可加盐)

方法一&#xff1a;MD5直接加密 import hashlibtext1123456 print(text1) mdhashlib.md5(text1.encode()) # 创建md5对象 md5pwdmd.hexdigest() # md5加密 print(md5pwd) 输出结果&#xff1a; 方法二&#xff1a;MD5盐加密&#xff0c;将盐拼接在原密码后 import ha…

开源生成式AI初创平台together.ai,获7.3亿元融资

11月30日&#xff0c;开源生成式AI平台Together AI在官网宣布&#xff0c;获得1.025亿美元&#xff08;约7.3亿元&#xff09;A轮融资。本次由凯鹏华盈 (Kleiner Perkins) 领投&#xff0c;英伟达、Emergence Capital、 NEA、Prosperity 7、Greycroft等跟投。 公开资料显示&am…

样品实验Oxfilm351CN高沸点低VOC成膜助剂TDS说明书

样品实验Oxfilm351CN高沸点低VOC成膜助剂TDS说明书 1KG/瓶

js的严格模式

严格模式下有如下注意点 一&#xff1a; 全局this的用法 function Foo(){use strictconsole.log(this.location); } Foo() 如上代码this.location会打印typeError 因为this都是undefined&#xff0c;再调用就直接报错了。 可以使用window.location&#xff0c;可以获取到…

Windows核心编程 HOOK

目录 HOOK概述 HOOK API SetWindowsHookExA 函数(winuser.h) UnhookWindowsHookEx 函数(winuser.h) NextHookEx 函数(winuser.h) 局部钩子 全局钩子 为什么全局钩子需要用dll作为过程函数&#xff1f; HOOK概述 本质&#xff1a;Windows消系统的消息过滤器。 全局钩子…