JDBC---Mysql(2)
SQL注入攻击:
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想知道的数据,这就是所谓的SQL注入攻击,
例如:判断username='a' or 'a'='a'; true从而为真,然后查询到信息
下面是一个登录查询数据库--返回结果为true
//用的查询是where 名字and密码都对的才返回true,说明数据库中有这个用户
/*
* 登录 使用username和password去查询数据 若查出结果集,说明正确!返回true 若查不出结果,说明用户名或密码错误,返回false
*/ public boolean login(String username, String password)
throws ClassNotFoundException, SQLException { /*
* 1得到connection 2得到statement 3得到resultset 4rs.next()返回的是什么,我们就返回什么
*/ String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/mydb3";
String mysqlUsername = "root";
String mysqlPassword = "123456"; Class.forName(driverClassName);
Connection con = DriverManager.getConnection(url, mysqlUsername,
mysqlPassword);
Statement stmt = con.createStatement();
// 目的是拼接成select * from t_user where username='zhangsan' and
// password='123';这样一句话
String sql = "select * from t_user where username='" + username
+ "'and password='" + password + "'"; ResultSet rs = stmt.executeQuery(sql);//返回一条记录 /*rs.last();
System.out.println("记录数:"+rs.getRow());*/ System.out.println(sql);
return rs.next();
} /*sql攻击*/
@Test
public void fun1() throws ClassNotFoundException, SQLException { // select * from t_user where username='a' or 'a'='a'and password='a' or 'a'='a'//sql语句,,废话 where条件为真
String username="a' or 'a'='a";
String password="a' or 'a'='a";
boolean bl= login(username, password);
// System.out.println(username+password);
System.out.println(bl);
}
防SQL注入:
使用PreparedStatement
1.给出sql模板:所有的参数使用?来代替
2.调用Connection方法,得到PreparedStatement。
给模板中的?赋值pstmt.setString(int num,String "xx");
----boolean login2(String username,String password)方法
String sql="select * from t_user where username=? and password=?";
PreparedStatement pstmt=con.prepareStatement(sql);
/*
* 二、为参数赋值
*
* */
pstmt.setString(1, username);//给第一个问号赋值,值为username
pstmt.setString(2, password);//给第二个问号赋值,值为password ResultSet rs= pstmt.executeQuery(); return rs.next();
============================
@Test
public void fun2() throws ClassNotFoundException, SQLException { // select * from t_user where username='a' or 'a'='a'and password='a' or 'a'='a'//sql语句,,废话 where条件为真
String username="lisi";
String password="456";
boolean bl= login2(username, password);
// System.out.println(username+password);
System.out.println(bl);
}
JDBC---Mysql(2)的更多相关文章
- JDBC设计理念浅析 JDBC简介(一)
概念 JDBC是J2EE的标准规范之一,J2EE就是为了规范JAVA解决企业级应用开发制定的一系列规范,JDBC也不例外. JDBC是用于Java编程语言和数据库之间的数据库无关连接的标准Java A ...
- JDBC驱动程序注册 JDBC简介(二)
使用JDBC进行数据库操作的第一步就是驱动注册(当然你得先导入JAR). 驱动注册有多种方式,第一步必然是获得正确的驱动名称与URL格式 驱动名称与URL格式 RDBMS 驱动程序名称 ...
- Connection 对象简介 方法解读 JDBC简介(四)
通过驱动管理器DriverManager的getConnection方法,可以创建到指定URL的连接 Connection conn = DriverManager.getConnection ...
- 执行对象Statement、PreparedStatement和CallableStatement详解 JDBC简介(五)
执行对象是SQL的执行者,SQL是“安排好的任务”,执行对象就是“实际工作的人”. 执行对象有三种: Statement.PreparedStatement和CallableStatement,他们都 ...
- JDBC 异常简介 jDBC简介(六)
SQL 异常简介 对于数据库的操作访问,必然也很可能抛出异常. JDBC中定义了SQLException,用于描述数据库相关操作中可能出现的异常情况. java.sql.SQLException ...
- JDBC事务与保存点 JDBC简介(七)
事务简介 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务是必须满足4个条件(ACID) 事务的原子性( A ...
- Data Source与数据库连接池简介 JDBC简介(八)
DataSource是作为DriverManager的替代品而推出的,DataSource 对象是获取连接的首选方法. 起源 为何放弃DriverManager DriverManager负责管理驱动 ...
- 转 JDBC连接数据库(二)——连接池
https://www.cnblogs.com/xiaotiaosi/p/6398371.html 数据库保持长连接,不过一直都是idle,除非有用户激活连接,这样后果是无法删除用户,但是不影响数据库 ...
- MySQL(Linux)编码问题——网站刚刚上线就被光速打脸
MySQL(Linux)编码问题--刚刚上线就被光速打脸 MySql默认编码问题 总结了一下,大致是这样的 修改数据库配置 在URL上加载参数 MySql默认编码问题 说到这里真的想哭,改了无数bug ...
- MySql(四)SQL注入
MySql(四)SQL注入 一.SQL注入简介 1.1 SQL注入流程 1.2 SQL注入的产生过程 1.2.1 构造动态字符串 转义字符处理不当 类型处理不当 查询语句组装不当 错误处理不当 多个提 ...
随机推荐
- 利用OCR识别扫描的jpg、tif文件的文字
第一步:下载老马哥的从 office和sharepoint 提取出来的注册表和dll http://115.com/file/dpa4qrt2 或者直接安装office和sharepoint2007 ...
- linux每日命令(18):whereis命令
whereis命令用于查找文件. 该指令会在特定目录中查找符合条件的文件.这些文件应属于原始代码.二进制文件,或是帮助文件. 该指令只能用于查找二进制文件.源代码文件和man手册页,一般文件的定位需使 ...
- 重定向如何携带cookie
起因 最近在做微信开放平台,需要给第三方入住,而且入住方都有自己的二级域名.做过微信开发的人都知道,坑爹的是微信并不支持这种二级域名的方式,所以用一个域名专门来处理. 问题 然后由于采用了一个专门的域 ...
- 【Unity】讯飞语音识别SDK
1.进入讯飞官网,注册帐号,进入控制台,创建新应用UnityXunfeiDemo,平台选Android.在当前应用这点下载SDK,添加AI能力(添加新服务),选择语音听写,即可下载安卓SDK(下称讯飞 ...
- easyui-combox(tagbox) 多选操作 显示为tagbox
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C语言学习之路
c语言学习 初识c语言 c语言数据类型.运算符和表达式(整数浮点数) 字符型数据/字符串 算术运算符和算术表达式(优先级,结合性等) 顺序程序设计(运算符之类内容,字符输入输出等) C/C++ 查看数 ...
- Oracle DBA神器之Toad
很早就听说Toad功能很强大,一直没有使用过,因为PLSQL Developer就很好用.前几天看见同事优化Oracle就是用的Toad,有一些很强大的管理功能,于是再一次对Toad产生兴趣,收集了一 ...
- 公众平台返回原始数据为: 错误代码-40164,错误信息-invalid ip, not in whitelist hint
1.登录公众平台,进入开发->基本配置页面 2.点击配置进入IP白名单设置页 3.填写微客助理IP地址:183.63.25.68 4.管理员扫码确认保存 5.设置成功后点击“关闭” 6.修改成功 ...
- iOS Xcode, 解决“Could not insert new outlet connection”的问题。
在Xcode中,我们能够在StoryBoard编辑界面或者是xib编辑界面中通过"Control键+拖拽"的方式将某个界面元素和相应的代码文件连接起来,在代码文件里创建outlet ...
- 【转载】Eclipse快捷键 10个最有用的快捷键
Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. ...