026_jdbc-mysql-PrepareStatement解决sql注入
1. 新建一个JDBCPrepareStatement工程, 使用我们之前的JDBCUtil.java和jdbc.properties属性文件
2. PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。
3. 使用PreparedStatement对象编写程序
4. 输入任意用户名和密码, 并且sql注入, 登录失败
5. 使用正确的用户名和密码, 登录成功
6. 使用PreparedStatement对象进行插入操作
7. 使用PreparedStatement对象进行更新操作
8. 使用PreparedStatement对象进行删除操作
9. 使用PreparedStatement对象查找所有用户
10. UserDao.java接口代码
package com.lywgames.dao;public interface UserDao {/*** 用户登录方法* @param username* @param password*/public void login(String username, String password);/*** 注册新用户* @param username* @param password* @param registertime*/public void register(String username, String password, long registertime);/*** 修改密码* @param username* @param password*/public void modifyPassword(String username, String password);/*** 删除用户* @param username*/public void deleteUser(String username);/*** 查找所有用户*/public void findAll();
}
11. UserDaoImpl.java完整代码
package com.lywgames.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import com.lywgames.dao.UserDao;
import com.lywgames.util.JDBCUtil;public class UserDaoImpl implements UserDao {public void login(String username, String password) {Connection conn = null;
// Statement st = null;PreparedStatement ps = null;ResultSet rs = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); /*** // 2.创建statement, 跟数据库打交道, 一定需要这个对象* st = conn.createStatement();* // 3.执行查询sql, 获取ResultSet结果集* rs = st.executeQuery("select * from user where username='"+ username +"' and password='"+ password +"'");**/// 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("select * from user where username=?and password=?");// 给占位符赋值, 位置从1开始ps.setString(1, username);ps.setString(2, password);// 3.执行查询rs = ps.executeQuery();// 4.使用ResultSet结果集遍历if(rs.next()){System.out.println("登录成功");}else{System.out.println("登录失败");}} catch (SQLException e) {e.printStackTrace();} finally {// 5.释放资源JDBCUtil.release(conn, ps, rs);}}@Overridepublic void register(String username, String password, long registertime) {Connection conn = null; PreparedStatement ps = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); // 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("insert into user (username,password,registertime) values (?,?,?)");// 给占位符赋值, 位置从1开始ps.setString(1, username);ps.setString(2, password);ps.setTimestamp(3, new Timestamp(registertime));// 3.执行更新ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {// 4.释放资源JDBCUtil.release(conn, ps);}}@Overridepublic void modifyPassword(String username, String password) {Connection conn = null; PreparedStatement ps = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); // 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("update user set password=? where username=?");// 给占位符赋值, 位置从1开始ps.setString(1, password);ps.setString(2, username);// 3.执行更新ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {// 4.释放资源JDBCUtil.release(conn, ps);}}@Overridepublic void deleteUser(String username) {Connection conn = null; PreparedStatement ps = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); // 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("delete from user where username=?");// 给占位符赋值, 位置从1开始ps.setString(1, username);// 3.执行更新ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {// 4.释放资源JDBCUtil.release(conn, ps);}}@Overridepublic void findAll() {Connection conn = null; PreparedStatement ps = null;ResultSet rs = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); // 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("select * from user");// 3.执行查询rs = ps.executeQuery();// 4.使用ResultSet结果集遍历while(rs.next()){System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getTimestamp(4));}} catch (SQLException e) {e.printStackTrace();} finally {// 5.释放资源JDBCUtil.release(conn, ps, rs);}}
}
026_jdbc-mysql-PrepareStatement解决sql注入相关推荐
- mysql注入实例获取答案_本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下:问题解读我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,...
本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...
- mysql5无法注入_MySQL解决SQL注入的另类方法详解_MySQL
本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...
- 使用过滤器解决SQL注入和跨站点脚本编制
1 SQL注入.盲注 1.1 SQL注入.盲注概述 Web 应用程序通常在后端使用数据库,以与企业数据仓库交互.查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本).Web 应用 ...
- python防止sql注入的方法_python解决sql注入以及特殊字符
python往数据库插入数据, 基础做法是: cur=db.cursor() sql = "INSERT INTO test2(cid, author, content) VALUES (1 ...
- pdo mysql防注入_Php中用PDO查询Mysql来避免SQL注入风险的方法
当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_ ...
- ibatis解决sql注入问题 .
最近看看了SQL注入的问题,这篇文章解决了ibatis如何防sql注入攻击,值得参考,转自http://blog.csdn.net/scorpio3k/article/details/7610973 ...
- 解决SQL注入与XSS攻击
最近接手之前同事的几个项目,公司利用扫描工具进行全项目扫描,发现了部分项目代码存在安全漏洞,所以需要进行项目代码修复以避免有人恶意攻击.这个任务自然而然的就落到我手上.在这里记录一下操作的过程. 扫描 ...
- mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题
前言略,直奔主题.. #{}相当于jdbc中的preparedstatement ${}是输出变量的值 简单的说就是#{}传过来的参数带单引号'',而${}传过来的参数不带单引号. 你可能说不明所以, ...
- mysql pdo 安全_使用PDO查询Mysql来避免SQL注入风险
当 我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失 去控制.虽然可以用mysql_real_escap ...
最新文章
- Android 串口通讯 获取卡号
- Entity Framework快速入门笔记第四篇—ModelFirst
- Ironic 裸金属管理服务的底层技术支撑
- 利用samba和mount命令 进行文件共享
- Spring Boot笔记-echarts的使用及数据的修改
- 训练日志 2018.12.16
- 高性能服务器设计——模块间通信(转载)
- 请求过程中,需要证书认证,这种情况下如何处理
- 【浙江大学PAT真题练习乙级】1004 成绩排名 (20分) 真题解析
- maven配置本地jar包
- 迅为IMX6ULL开发板点亮第一个led灯之led子系统的使用
- 为什么我卸载了微博?
- 北大计算机学霸,揭秘:2018北大在京录取的学霸们有何特长(组图)
- 计算机论文课题来源,浅析论文题目的来源和意义
- html 全场开场动画,HTML5 星际大战电影开场字幕动画
- 编程金融小白学 股票期权 lv.7 希腊字母 Theta
- 数据结构与算法一:稀疏数组 队列 链表
- 《人月神话》-人月神话
- JQuery选择器细节-遁地龙卷风
- C++的反思(知乎精华)
热门文章
- url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介【转】
- webpack入门+react环境配置
- [转]Java——Servlet的配置和测试
- [CLPR] 用于加速训练神经网络的二阶方法
- 数据仓库入门(实验7)部署分析服务数据库
- IIS 应用程序池设置
- datatablelistT
- 爬虫之Selenium
- 羡慕女设计师啊,天生色感好!
- BZOJ 3597 SCOI2014 方伯伯送椰子 网络流分析+SPFA