SQL注入问题------JDBC编写简单登录代码
一、什么是sql注入
sql注入:用户输入的内容, 有一些sql的特殊关键字参与字符串的拼接,完成了一条逻辑发生变化的新的SQL语句 !
用代码举个例子简单说明一下:
package cn.zhbit.jdbc;
import cn.zhbit.util.JDBCUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class jdbc_login_test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
boolean flag = new jdbc_login_test().login(username,password);
if (flag){
System.out.println("登陆成功!");
}else {
System.out.println("用户名或密码错误!");
}
}
public boolean login(String username, String password){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
if (username == null || password == null){
return false;
}
try {
conn = JDBCUtils.getConnection(); //获取数据库链接对象
String sql = "select * from user where username = '" + username + "'and password = '" + password +"'" ;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(rs,stmt,conn); //释放资源
}
return false;
}
}
上边代码原理是:
1:用户输入用户名和密码
2:在数据库中查找匹配的用户名和密码,若有匹配的则登录成功,否则,提示"用户名或密码错误!"。实际就是在数据库中执行以下sql语句
String sql = "select * from user where username = '" + username + "'and password = '" + password +"'" ;
上边代码的逻辑看似没有问题,实则问题很大:
当用户这样输入:输入数据库中不存在的用户名,例如khkj,然后输入密码:a' or 'a' = 'a,这样输入也能登陆成功
原因:
当用户输入以上用户名和密码时,程序就会在数据库中执行以下sql语句
sql : select * from user where username = 'khkj' and password = 'a' or 'a' = 'a' ;只是一条恒等式,数据库会返回user表中所有的内容,这样rs.next()就会等于true,所以可以登陆成功。
SQL注入问题------JDBC编写简单登录代码的更多相关文章
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务
JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...
- 然之协同系统6.4.1 SQL注入之exp编写
前言 前面已经说明了 漏洞成因,这里介绍一下 exp 的编写. 正文 为了 getshell 或者是 任意文件下载, 我们需要修改 数据库中的 前缀sys_file 表, 所以我们的利用方式如下 使用 ...
- 齐博cms最新SQL注入网站漏洞 可远程执行代码提权
齐博cms整站系统,是目前建站系统用的较多的一款CMS系统,开源,免费,第三方扩展化,界面可视化的操作,使用简单,便于新手使用和第二次开发,受到许多站长们的喜欢.开发架构使用的是php语言以及mysq ...
- Sqli-LABS通关笔录-11[sql注入之万能密码以及登录框报错注入]
在这一关卡我学到了 1.万能密码的构造,大概的去揣测正常的SQL语句是如何的. 2. 3. 00x1 SQL万能密码的构造 在登录框当中可以添加了一个单引号.报错信息如下所示: 据此报错,我们大概的可 ...
- Java 防SQL注入过滤器(拦截器)代码
原文出自:https://blog.csdn.net/seesun2012 前言 浅谈SQL注入: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符 ...
- 简单说说mybatis是防止SQL注入的原理
mybatis是如何防止SQL注入的 1.首先看一下下面两个sql语句的区别: <select id="selectByNameAndPassword" parameterT ...
- 预防SQL注入笔记
SQL注入如何预防? 本文参考自owasp,重点是提供清晰,简单,可操作的指导,以防止应用程序中的SQL注入漏洞.不幸的是,SQL注入攻击很常见,这是由于两个因素: SQL注入漏洞的显着流行 目标的吸 ...
- MySql(四)SQL注入
MySql(四)SQL注入 一.SQL注入简介 1.1 SQL注入流程 1.2 SQL注入的产生过程 1.2.1 构造动态字符串 转义字符处理不当 类型处理不当 查询语句组装不当 错误处理不当 多个提 ...
随机推荐
- MS06-040漏洞研究(上)【转载】
课程简介 我在之前的课程中讨论过W32Dasm这款软件中的漏洞分析与利用的方法,由于使用该软件的人群毕竟是小众群体,因此该漏洞的危害相对来说还是比较小的.但是如果漏洞出现在Windows系统中,那么情 ...
- [LeetCode每日一题]153.寻找旋转排序数组中的最小值
[LeetCode每日一题]153.寻找旋转排序数组中的最小值 问题 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1, ...
- 【python】Leetcode每日一题-矩阵置零
[python]Leetcode每日一题-矩阵置零 [题目描述] 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解 ...
- android之布局优化
android中提供了<include />.<merge />.<ViewStub />三种优化布局. 1.<include /> <inclu ...
- vuex、localStorage、sessionStorage之间的区别
vuex存储在内存中,localStorage以文件形式存储在本地,sessionStorage针对一个session(阶段)进行数据存储. 当页面刷新时vuex存储的数据会被清除,localStor ...
- 手把手教你部署验证freeswitch(避免踩坑)
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 介绍:freeswitch可集成ASR(语音识别)和TTS(文本转语音)创建智能电话机器人和用户通话,可用于问卷调查,自动催缴等业务,电 ...
- 2021年主流CRM系统盘点
面对市面上五花八门的CRM系统,相信您在选择的时候肯定是一头雾水.哪个CRM系统功能最强大?哪个CRM系统性价比最高?哪个CRM系统最适合企业使用?本篇文章小编将选出几家有代表性的CRM系统,并进行对 ...
- queryset惰性与缓存
https://blog.csdn.net/zhu6201976/article/details/83550461
- Java并发-显式锁篇【可重入锁+读写锁】
作者:汤圆 个人博客:javalover.cc 前言 在前面并发的开篇,我们介绍过内置锁synchronized: 这节我们再介绍下显式锁Lock 显式锁包括:可重入锁ReentrantLock.读写 ...
- AOP随笔
AOP: Aspect-Oriented Programming 面向切面编程. 首先明确一个点:AOP是一个概念.那么对于一个概念,其实现方式多种多样,分为静态AOP.动态AOP,而对于动态AOP的 ...