网站首页 > 编程文章 正文
一、前言
项目开发中,操作数据库是必不可少的,对于数据库的连接,各种架构对数据库的连接部分都有一些封装,
常用的操作数据库的框架有:MyBatis、JdbcTemplate等有很多。但是,无论使用哪种框架操作数据库,最底层的api实现都是JDBC,就是说,在开发中,JDBC有着举足轻重的地位,将其弄明白也是很重要的。
二、JDBC概述
Java数据库连接--JDBC,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。它其实是官方定义的一套操作所有的关系型数据库的规则, 我们所熟知的关系型数据库有mysql,SQL server, Oracle,DB2等等。各个数据库连接的方式都不一样,我们程序员不可能连接mysql数据库对应一套编码,连接sql server在进行一套编码吧,so,JDBC的出现解决了这个问题,各个数据库的厂商去实现这套接口,提供数据库的驱动的jar包。而我们用这套接口进行编程,真正执行的代码是驱动jar包中的实现类。
如下图:Application为应用程序 调用接口,下边是各个驱动,然后是各个数据库
三、JDBC编程
JDBC开发前的准备工作,先从官网上下载对应的驱动jar包,然后将其配置到环境变量classpath当中:
查看环境变量中是否有classpath变量,如果上下都没有,新建如下:
输入变量名:classpath
变量值: .;D:\course\06-JDBC\resources\MySql Connector Java 5.1.23\mysql-connector-java-5.1.23-bin.jar
【注意】:.; 千万不可以省略。
JDBC编程六步
第一步:注册驱动(告诉Java程序,即将要连接的是哪个数据库)
第二步:获取连接(JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完之后一定要关闭通道。)
第三步:获取数据库操作对象(专门执行sql语句的对象)
第四步:执行SQL语句
第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集。)
第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程之间的通信,开启之后一定要关闭。)
案例1
推荐这种注册方式--反射机制
四、SQL注入问题
4.1 定义
SQL注入是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限陷)。
即:注入产生的原因是后台服务器接收相关参数未经过滤直接带入数据库查询
4.2 SQL注入示例
假设有一个场景: 用户通过用户名称,进行精确查询,用户输入的信息中有SQL关键字,并且参与了SQL语句的编译,导致SQL语句含义扭曲,最终导致了SQL注入。用户本来只应该查询到他自己的信息,但是却查出来了所有的用户信息。
SQL注入,简单来说,就是用一些SQL关键字,来导致一些不正常的现象,下面的这条sql,由于and优先级高于or,在用户录入userName = ‘lisi’ or ‘hello’ = 'hello’信息进行查询时,执行时sql就变成了select * from user where status = 1 and userName = ‘lisi’ or ‘hello’ = ‘hello’,导致SQL语句条件永远为真,会查出所有的用户信息数据。
4.3 漏洞危害
1. 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
2. 网页篡改:通过操作数据库对特定网页进行篡改。
3. 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
4. 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
5. 服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
6. 破坏硬盘数据,瘫痪全系统。
4.4 sql注入防范
解决SQL注入问题的关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。
1. 对输入进行严格的转义和过滤
2. 使用参数化(Parameterized):目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
3. 云端防护(如阿里云盾)
星辰大海,永不止步
END
猜你喜欢
- 2024-09-08 JDBC数据库连接怎么操作?(jdbc连接数据库实例)
- 2024-09-08 mysql 5 & 8 JDBC的差别(mysql和jdbc的关系)
- 2024-09-08 肝!Spring JDBC持久化层框架“全家桶”教程
- 2024-09-08 0467-Hadoop SQL客户端工具之Dbeaver安装及使用
- 2024-09-08 离线端Pycharm中Database工具数据库驱动程序的安装
- 2024-09-08 JDBC数据库开发(一)(jdbc如何实现数据库访问)
- 2024-09-08 0312-如何在Kerberos环境下使用Spark2通过JDBC访问Impala
- 2024-09-08 Kafka连接器深度解读之JDBC源连接器
- 2024-09-08 JDBC、SQL注入攻击原理以及解决方案
- 2024-09-08 大数据开发基础之JAVA基础-JDBC基础知识
你 发表评论:
欢迎- 05-09Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 05-09《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- 05-09MapStruct架构设计(mapstruct @mapping)
- 05-09分布式微服务架构组件(分布式微服务架构设计)
- 05-09Java Swing组件下的JButton实例(java swing 组件)
- 05-09java基础都在这了,小主们拿去吧(java基础是指什么)
- 05-09AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 05-09【Spring Boot】WebSocket 的 6 种集成方式
- 最近发表
-
- Spring Boot3 RESTful 接口参数校验,这篇吃透就够了!
- 《Spring6》第02节:基于XML方式搭建Spring6框架开发环境
- MapStruct架构设计(mapstruct @mapping)
- 分布式微服务架构组件(分布式微服务架构设计)
- Java Swing组件下的JButton实例(java swing 组件)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- AOP的实现落地(拦截过滤),一切都要从Servlet说起
- 【Spring Boot】WebSocket 的 6 种集成方式
- Java 中五种最常见加密算法:原理、应用与代码实现
- 用注解进行参数校验,spring validation介绍、使用、实现原理分析
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)