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)的更多相关文章

  1. JDBC设计理念浅析 JDBC简介(一)

    概念 JDBC是J2EE的标准规范之一,J2EE就是为了规范JAVA解决企业级应用开发制定的一系列规范,JDBC也不例外. JDBC是用于Java编程语言和数据库之间的数据库无关连接的标准Java A ...

  2. JDBC驱动程序注册 JDBC简介(二)

    使用JDBC进行数据库操作的第一步就是驱动注册(当然你得先导入JAR). 驱动注册有多种方式,第一步必然是获得正确的驱动名称与URL格式 驱动名称与URL格式 RDBMS 驱动程序名称        ...

  3. Connection 对象简介 方法解读 JDBC简介(四)

    通过驱动管理器DriverManager的getConnection方法,可以创建到指定URL的连接     Connection conn = DriverManager.getConnection ...

  4. 执行对象Statement、PreparedStatement和CallableStatement详解 JDBC简介(五)

    执行对象是SQL的执行者,SQL是“安排好的任务”,执行对象就是“实际工作的人”. 执行对象有三种: Statement.PreparedStatement和CallableStatement,他们都 ...

  5. JDBC 异常简介 jDBC简介(六)

    SQL 异常简介 对于数据库的操作访问,必然也很可能抛出异常. JDBC中定义了SQLException,用于描述数据库相关操作中可能出现的异常情况. java.sql.SQLException    ...

  6. JDBC事务与保存点 JDBC简介(七)

    事务简介 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务是必须满足4个条件(ACID) 事务的原子性( A ...

  7. Data Source与数据库连接池简介 JDBC简介(八)

    DataSource是作为DriverManager的替代品而推出的,DataSource 对象是获取连接的首选方法. 起源 为何放弃DriverManager DriverManager负责管理驱动 ...

  8. 转 JDBC连接数据库(二)——连接池

    https://www.cnblogs.com/xiaotiaosi/p/6398371.html 数据库保持长连接,不过一直都是idle,除非有用户激活连接,这样后果是无法删除用户,但是不影响数据库 ...

  9. MySQL(Linux)编码问题——网站刚刚上线就被光速打脸

    MySQL(Linux)编码问题--刚刚上线就被光速打脸 MySql默认编码问题 总结了一下,大致是这样的 修改数据库配置 在URL上加载参数 MySql默认编码问题 说到这里真的想哭,改了无数bug ...

  10. MySql(四)SQL注入

    MySql(四)SQL注入 一.SQL注入简介 1.1 SQL注入流程 1.2 SQL注入的产生过程 1.2.1 构造动态字符串 转义字符处理不当 类型处理不当 查询语句组装不当 错误处理不当 多个提 ...

随机推荐

  1. 从一道面试题来认识java类加载时机与过程【转】

    说明:本文的内容是看了<深入理解Java虚拟机:JVM高级特性与最佳实践>后为加印象和理解,便记录了重要的内容. 1  开门见山 以前曾经看到过一个java的面试题,当时觉得此题很简单,可 ...

  2. composer 再centos 下的安装

    $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer

  3. js调用winform程序(带参数)

    我们会发现,我们点击迅雷下载的时候  网页可以调用应用程序,而且连接会传入迅雷,这个是怎么做到的呢? 原理: 先注册表中添加软件的具体信息,然后通过 href 可以直接调用 1.写入注册表信息,注册, ...

  4. mysql按天数据统计

    例: SELECT DATE_FORMAT(`create_time`, ) AS num FROM `dc_loan_aa_orders` GROUP BY DATE_FORMAT(`create_ ...

  5. python 守护进程,监控进程

    守护进程代码: import time, os import subprocess def run(): while True: taskList = os.popen('tasklist').rea ...

  6. 年关将至业内警示P2P跑路风险

    年关将近,P2P网贷行业的问题平台亦不断增多,“跑路潮”会否再现,业内人士讨论热烈. “从历年数据统计来看,问题平台接近线性向上的增长趋势,即时间越往后,问题平台占比就越高,而每逢年关,问题平台占比都 ...

  7. C# 解决读取dbf文件,提示Microsoft Jet 数据库引擎找不到对象的问题

    前言 最新项目需要经常和dbf文件打交道,在实际场景中很多软件需要和一些老的系统进行数据交互,而这些系统都在使用foxpro数据库,读取dbf文件一般都是分为两种情况:第一:安装foxpro的驱动进行 ...

  8. sencha touch 入门学习资料大全(2015-12-30)

    现在sencha touch已经更新到2.4.2版本了 重新整理一下资料 官方网站:http://www.sencha.com/products/touch/ 在线文档:http://docs.sen ...

  9. Doker学习笔记之一:安装

    基于Ubuntu16.04LTS 第一步:通过脚本进行安装 $ curl -sSL https://get.docker.com/ | sh 或者选择国内的DaoCloud安装脚本 $ curl -s ...

  10. vagrant up connection time out

    vagrant up connection time out 在一台重装系统的机子上装vagrant后 vagrant up 无法启系统 D:\work\vagrant>vagrant up B ...