jdbc java数据库连接 8)防止sql注入
回顾下之前jdbc的开发步骤:
1:建项目,引入数据库驱动包
2:加载驱动
Class.forName(..);
3:获取连接对象
4:创建执行sql语句的stmt对象; 写sql
5:执行sql
a) 更新 delete/insert/update
!:executeUpdate();
b) 查询 select
!:executeQuery();
6:关闭/异常
之前有说过,Statement接口和PreparedStatement接口的区别,其中的一个就是:
PreparedStatement接口能够防止sql注入
那么,什么是sql注入呢?
其实sql注入就是用户输入的恶意密码,能够绕过你的用户名和密码登陆。
例子:
1:首先创建个数据库
-- 创建数据库
CREATE DATABASE jdbc_demo DEFAULT CHARACTER SET utf8;i
-- 创建表
USE jdbc_demo;
CREATE TABLE admin(
id INT PRIMARY KEY AUTO_INCREMENT,
userName VARCHAR(20),
pwd VARCHAR(20)
)
2:使用Statement接口,没有防止sql注入:
/**
* 模拟用户登陆数据库,演示注入
*
* @author LLZ
*/
public class Two_StatementDemo { /**
* 1:sql注入 Statement
*/ private Connection conn;
private Statement stsm;
private ResultSet rs;
private PreparedStatement pstsm; @Test
public void Test1() { String user = "tom";
// String password = "123";
String password = " ' or 1=1 -- /**/ "; // sql注入,这个也可以登陆成功 try {
// 1.1:加载驱动
conn = Jdbcutil.getConnection(); // 1.3:创建Statement对象
stsm = conn.createStatement(); // 1.4:准备sql语句
String sql = "select * from jdbc where user='" + user
+ "' and password='" + password + "' "; // 1.5:执行sql
rs = stsm.executeQuery(sql); // 1.6:打印返回的结果
if (rs.next()) {
System.out.println(rs.getInt("id"));
}
} catch (Exception e) {
e.printStackTrace(); } finally {
// 1.7:关闭连接
try {
rs.close();
stsm.close();
conn.close();
} catch (Exception e) { e.printStackTrace();
}
}
}
3:使用PreparedStatement接口,防止sql注入:
其原因就是由于该接口具有缓存区,需要先执行预编译远,等传入参数才正式执行sql语言
/**
* 二:用PreparedStatement防止sql注入
*/
@Test
public void Test2() { String user = "tom";
String password = "123";
// String password = " ' or 1=1 -- /**/ "; // sql注入,这个在这里就无法登陆
// 准备sql预编译语句
String sql = "select * from jdbc where user=? and password=?"; try {
// 2.1:创建连接
conn = Jdbcutil.getConnection(); // 2.2:创建PerparedStatement对象(执行预编译)
pstsm = conn.prepareStatement(sql); // 2.3:准备参数
pstsm.setString(1, user);
pstsm.setString(2, password); // 2.4:发送参数,执行sql
ResultSet rs = pstsm.executeQuery();
if (rs.next()) {
System.out.println(rs.getInt("id"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 2.5:关闭连接
Jdbcutil.close(conn, pstsm, rs);
} }
jdbc java数据库连接 8)防止sql注入的更多相关文章
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- Java学习之路- SQL注入
用户名: __________ 密码:——————— 假如没有使用预处理的Statement 对象 拼接字符串查数据库的话,易收到sql注入攻击: 例如说 : mysql 中 #代表的是单行注释 ...
- JDBC中的PreparedStatement-防止SQL注入攻击
在JDBC对数据库进行操作的时候,SQL注入是一种常见的针对数据库的注入攻击方式.如下面的代码所演示,在我们的提交字段中掺入了SQL语句,会使得程序的登录校验失效: package org.lyk.m ...
- 【挖坑】2019年JAVA安全总结:SQL注入——新项目的开发与老项目的修复
如何在项目中有效的防止SQL注入 写给需要的人,所有的问题源自我们的不重视. 本章略过"什么是SQL注入","如何去利用SQL注入"的讲解,仅讲如何去防御 PS ...
- MySQL_(Java)使用preparestatement解决SQL注入的问题
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC创建用户名和密码校验查询方法 传送门 MySQL数据库中的数据,数据库名garysql,表名gar ...
- Java代码审计连载之—SQL注入
前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java ...
- jdbc操作数据库以及防止sql注入
public class pr { public static void main(String[] args) { Connection conn = null; Statement st = nu ...
- jdbc java数据库连接 11)中大文本类型的处理
1. Jdbc中大文本类型的处理 Oracle中大文本数据类型, Clob 长文本类型 (MySQL中不支持,使用的是text) Blob 二进制类型 MySQL数据库, Text ...
- jdbc java数据库连接 6)类路径读取——JdbcUtil的配置文件
之前的代码中,以下代码很多时候并不是固定的: private static String url = "jdbc:mysql://localhost:3306/day1029?useUnic ...
随机推荐
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...
- 【NLP】大数据之行,始于足下:谈谈语料库知多少
大数据之行,始于足下:谈谈语料库知多少 作者:白宁超 2016年7月20日13:47:51 摘要:大数据发展的基石就是数据量的指数增加,无论是数据挖掘.文本处理.自然语言处理还是机器模型的构建,大多都 ...
- 开源分布式数据库中间件MyCat源码分析系列
MyCat是当下很火的开源分布式数据库中间件,特意花费了一些精力研究其实现方式与内部机制,在此针对某些较为重要的源码进行粗浅的分析,希望与感兴趣的朋友交流探讨. 本源码分析系列主要针对代码实现,配置. ...
- 一位同事对 Rafy 框架的一些建议及我的回复
下面是一位同事对当前的产品开发框架提出的一些建议,以及我的回复.我觉得一些问题提得有一定的代表性,在征得本人同意后,将本邮件发布在博客中. 同时,也非常希望对框架.产品有好的建议的小伙伴,都可以给我发 ...
- 『.NET Core CLI工具文档』(十)dotnet-build
说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-build 翻译:dotnet-build 名称 dotnet-build -- 生成项目和所有的依赖 概 ...
- 网站美化常见CSS
伴随网络时代日新月异的发展,用户不仅仅满足于软件系统的功能需求,对软件系统的页面显示效果以及交互模式的要求也逐渐提高.尤其是展示性质的平台页面对于界面美化效果要求更高,有一句话说的好:Html是结构, ...
- 01windows窗体程序学习
静态用户名和密码的登录练习 private void button2_Click(object sender, EventArgs e) { textUser.Text = Convert.ToStr ...
- 【转】ZigBee终端入网方式深入分析
前述 继之前对终端Direct Join的分析,发现很多东西还很模糊,存在很多问题.终于找到时间继续深入挖下去,这次应该比较完整地搞清了终端的入网机制,并纠正之前的几个认识偏差. 由于Z-Stack网 ...
- Java概述
Java概述 一.前奏(常见的DOS命令) dir:列出当前目录下的文件以及文件夹 md:创建目录(文件夹) rd:删除目录 cd:进入指定目录 cd..:退出当前目录,返回到上一级目录 cd\:退回 ...
- 如何在Windows Server 2008 R2 SP1安装Redis-x64-3.2.100,并且自动注册服务
1.官网:http://redis.io/ 2.下载地址:https://github.com/MSOpenTech/redis/releases 3.最新的安装包: 4.点击msi文件开始安装. 5 ...