JDBC: SQL注入问题
2021/7/22 19:11:39
本文主要是介绍JDBC: SQL注入问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 Sql注入演示
1) 向jdbc_user表中 插入两条数据
# 插入2条数据 INSERT INTO jdbc_user VALUES(NULL,'jack','123456','2020/2/24'); INSERT INTO jdbc_user VALUES(NULL,'tom','123456','2020/2/24');
2) SQL注入演示
# SQL注入演示 -- 填写一个错误的密码 SELECT * FROM jdbc_user WHERE username = 'tom' AND PASSWORD = '123' OR '1' = '1';
如果这是一个登陆操作,那么用户就登陆成功了。显然这不是我们想要看到的结果
2 sql注入案例:用户登录
需求
用户在控制台上输入用户名和密码, 然后使用 Statement 字符串拼接的方式 实现用户的登录。
步骤
1) 得到用户从控制台上输入的用户名和密码来查询数据库
2) 写一个登录的方法
a) 通过工具类得到连接
b) 创建语句对象,使用拼接字符串的方式生成 SQL 语句
c) 查询数据库,如果有记录则表示登录成功,否则登录失败
d) 释放资源
Sql注入方式: '1'= '1'
代码示例
public class TestLogin01 { /** * 用户登录案例 * 使用 Statement字符串拼接的方式完成查询 * @param args */ public static void main(String[] args) throws SQLException { //1.获取连接 Connection connection = JDBCUtils.getConnection(); //2.获取Statement Statement statement = connection.createStatement(); //3.获取用户输入的用户名和密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名: "); String name = sc.nextLine(); System.out.println("请输入密码: "); String pass = sc.nextLine(); System.out.println(pass); //4.拼接Sql,执行查询 String sql = "select * from jdbc_user " + "where username = " + " '" + name +"' " +" and password = " +" '" + pass +"'"; System.out.println(sql); ResultSet resultSet = statement.executeQuery(sql); //5.处理结果集,判断结果集是否为空 if(resultSet.next()){ System.out.println("登录成功! 欢迎您: " + name); }else { System.out.println("登录失败!"); } //释放资源 JDBCUtils.close(connection,statement,resultSet); } }
3 问题分析
1) 什么是SQL注入?
我们让用户输入的密码和 SQL 语句进行字符串拼接。
用户输入的内容作为了 SQL 语句语法的一部分,改变了 原有 SQL 真正的意义,以上问题称为 SQL 注入 .
2) 如何实现注入
根据用户输入的数据,拼接处的字符串
select * from jdbc_user where username = 'abc' and password = 'abc' or '1'='1' name='abc' and password='abc' 为假 '1'='1' 真 相当于 select * from user where true=true; 查询了所有记录
3) 如何解决
要解决 SQL 注入,就不能让用户输入的密码和我们的 SQL 语句进行简单的字符串拼接
(见下篇)
这篇关于JDBC: SQL注入问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程
- 2024-12-20Svg Sprite Icon实战:从入门到上手的全面指南
- 2024-12-20LCD1602显示模块详解
- 2024-12-20利用Gemini构建处理各种PDF文档的Document AI管道