JDBC_07_SQL注入问题 (登录和注册)
SQL注入问题
导致SQL注入的根本原因是什么?
- 用户输入的信息中含有sql语句的关键字,并且用户所输入的信息参与了sql语句的编译过程,导致sql语句的原意被扭曲。
模拟用户登陆注册,演示sql注入
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner; /**
* 存在sql注入问题隐患 例如输入: 'fdsa' fdsa' or'1'='1 就会登录成功,因为 or一边成立就成立,1恒等于1
* 导致SQL注入的根本原因是什么?
* 用户输入的信息中含有sql语句的关键字,并且用户所输入的信息参与了sql语句的编译过程,导致sql语句的原意被扭曲。
*/
public class Main {
public static void main(String[] args) throws SQLException { //掉用initUI()获取用户名密码
Map<String,String> userLoginInfo=initUI(); //调用register()方法。
//boolean registerSuccess=register(userLoginInfo); //输出结果
//System.out.println(registerSuccess?"注册成功":"注册失败"); //调用logIn()方法。
boolean loginSuccess=login(userLoginInfo);
System.out.println(loginSuccess?"登陆成功":"密码错误"); } /**
* 用户注册
* @param userLoginInfo 用户登录信息
* @return true成功, false失败
*/ private static boolean register(Map<String, String> userLoginInfo) {
//创建连接对象
Connection connection=null;
Statement statement=null;
int count=0; try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接
connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root","123456"); //获取数据库操作对象
statement=connection.createStatement(); //执行SQL语句
count=statement.executeUpdate("insert into t_user(loginName,loginPwd,realName)values('"+userLoginInfo.get("loginName")+"','"+userLoginInfo.get("loginPwd")+"',' ') "); } catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
if(count==1){
return true;
}
return false;
} /**
* 用户登录
* @param userLoginInfo 用户信息
* @return 成功true 失败fslse
*/ private static boolean login(Map<String, String> userLoginInfo) throws SQLException { //标识
boolean flag=false; //获取用户信息
String loginName=userLoginInfo.get("loginName");
String loginPwd=userLoginInfo.get("loginPwd"); //创建连接对象
Connection connection=null;
Statement statement=null;
ResultSet resultSet=null; try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root","123456"); //获取数据库连接对象
statement=connection.createStatement(); //执行SQL语句
resultSet=statement.executeQuery("select * from t_user where loginName='"+loginName+"'and loginPwd='"+loginPwd+"'"); //处理查询结果集
if(resultSet.next()){
flag=true;
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
if(resultSet!=null){
resultSet.close();
}
if(statement!=null){
statement.close();
}
if (connection!=null){
connection.close();
}
} return flag;
} /**
* 初始化用户界面
* @return 返回用户登录信息
*/
private static Map<String, String> initUI() { //创建用户信息接收对象
Scanner scanner=new Scanner(System.in); //获取用户名
System.out.println("请输入您的用户名:");
String userName=scanner.nextLine(); //获取密码
System.out.println("请输入您的密码:");
String pwd=scanner.nextLine(); //创建一个Map集合用来存放用户输入得用户名和密码
Map<String,String> userLoginInfo=new HashMap<String,String>(); //存入Map集合
userLoginInfo.put("loginName",userName);
userLoginInfo.put("loginPwd",pwd); //返回该集合
return userLoginInfo;
}
}
JDBC_07_SQL注入问题 (登录和注册)的更多相关文章
- JDBC_08_解决SQL注入问题 (登录和注册)
解决SQL注入问题 只要用户提供的信息不参与sql语句的编译过程,那么尽管用户输入的信息中含有sql关键字那么也不会起作用了 要想使用户提供信息不参与sql语句的编译过程,那么必须使用 java.sq ...
- IO流的登录与注册
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileR ...
- XMPP iOS客户端实现三:登录、注册
1.创建一个单例模式来管理xmpp的连接和操作 +(XMPPManager *)share { static XMPPManager *_share=nil; static dispatch_once ...
- 利用SQL注入漏洞登录后台的实现方法
利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...
- 今天发现之前瑞乐做的登录和注册居然都是用的get请求,瞬间出了一身冷汗.
今天发现之前瑞乐做的登录和注册居然都是用的get请求,瞬间出了一身冷汗. 然后迅速的让晓勇改成post请求了. 不然我觉得凡是有点抓包能力的人抓到我们登录和注册这么涉及安全的东西居然用的是get请求, ...
- 免费 PSD 下载: 20个精美的登录和注册表单
注册表单有许多不同的形状和尺寸,有的只是单个的输入框,有的则需要多个步骤.登录表单的设计将定义网站的性质,因此它应进行针对性的设计.下面的列表提供了20个醒目的登录和注册表单设计为您提供灵感. 您可能 ...
- IOS Storyboard使用-模拟登录、注册、混合使用
最近分析IOS的占有率,发现5.0以下的少之又少了,故而决定新的App用 Storyboard开发,找了很多资料都是点上的,这个简单的demo是测试代码,发上来,供新手参考. 模拟登录.注册.和显示主 ...
- 利用开源项目使discus论坛与java应用同步登录和注册
最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块(评论啊,反馈啊)来减轻负担,甚至提到了要给每个资源开一帖的功能..使我十分怀疑到底是减轻负担还是增加负担...不过怀疑归怀疑, ...
- PHP实现登录,注册,密码修改
注册,登录,修改密码 1.登录 2.忘记密码 3.免费注册 页面布局 <div id="views" class="views"> <div ...
随机推荐
- DQL:data query language用来查询数据库表中的数据
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 如果没有查询条件,则每次查询所有的行.实际应用中,一般要指定查询的条件.对记录进行过滤. 查询 ...
- Dubbo之高级特性
Dubbo 注意当启动服务时,该服务会占用本机一个端口号,故在一台电脑启动多个服务时需要在配置文件中更占用本机的端口号 <!--服务占用本机的端口-当本机启动多个服务时须保持不同--> & ...
- 用代码来实践Web缓存
Web缓存是可以自动保存常见文档副本的HTTP设备.当Web请求抵达缓存时,如果本地有"已缓存的副本",就可以从本地存储设备而不是原始服务器中提取这个文档. 上面是<HTTP ...
- 一些 html+css 细节
一. input 光标(插入符)颜色 input: { caret-color: #c0c0ff; } 二. 修改 placeholder 颜色 input::placeholder { color: ...
- 后端程序员之路 56、go package
package分包.import导入包import . "package1" 省略前缀包名import p1 "package1" 起别名import _ & ...
- spring-Cloud初步依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- Docker下FastDFS环境搭建
本文使用docker进行搭建. #拉取镜像docker pull delron/fastdfs#创建tracker容器docker create --network=host --name trac ...
- js导出execl 兼容ie Chrome Firefox各种主流浏览器(js export execl)
第一种导出table布局的表格 1 <html> 2 3 <head> 4 <meta charset="utf-8"> 5 <scrip ...
- 订单和产品的多对多表关系在crudapi系统零代码实现
表关系管理 在上一篇序列号管理中,产品和销售订单都是孤立的单表,本文通过crudapi中表关系(relation)管理将多个表连接起来,形成一个整体. 概要 关系类型 表与表之间的关系(relatio ...
- Java 语言基础 01
语言基础·一级 什么是计算机? 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称 ...