您的位置:首页 > 数据库

解决sql注入问题

2020-04-02 07:53 931 查看

登录的小练习,解决sql注入问题

  • 注:借助了之前写的JDBCUtils的工具类和配置文件。
  • 先来一段错误的释放
package cn.itcast.jdbc;

import cn.itcast.util.JDBCUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class JDBCDemo9 {
/**
* * 需求:
*             1. 通过键盘录入用户名和密码
*             2. 判断用户是否登录成功
*                 * slect * from user where username = "" and password = "";
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
boolean flag = new JDBCDemo9().login(username, password);
if (flag == true){
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 {
//1.获取数据库连接
conn = JDBCUtils.getConnection();
//2.定义sql
String sql = "select * from user where username = '"+username+"' and password = '"+password+"'";
//3.获取执行sql的对象
stmt = conn.createStatement();
//4.执行查询
rs = stmt.executeQuery(sql);
//5.判断
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, stmt, conn);
}
return false;
}
}

解决sql注入问题

  • 我前一篇博客写的jdbc工具类里面改下close()方法的代码,加入PreparesStatement的代码。
package cn.itcast.jdbc;

import cn.itcast.util.JDBCUtils;

import java.sql.*;
import java.util.Scanner;

public class JDBCDemo9 {
/**
* * 需求:
*             1. 通过键盘录入用户名和密码
*             2. 判断用户是否登录成功
*                 * slect * from user where username = "" and password = "";
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
boolean flag = new JDBCDemo9().login(username, password);
if (flag == true){
System.out.println("登录成功");
}
else{
System.out.println("登录失败");
}
}

public boolean login(String username, String password){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Statement stmt = null;
if(username == null || password == null){
return false;
}
//判断数据库连接是否成功
try {
//1.获取数据库连接
conn = JDBCUtils.getConnection();
//2.定义sql
String sql = "select * from user where username = ? and password = ?";
//3.获取执行sql的对象
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,username);
pstmt.setString(2,password);
//4.执行查询,切记不用传递参数
rs = pstmt.executeQuery();
//5.判断
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, pstmt, stmt, conn);
}
return false;
}
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
Shen_R 发布了52 篇原创文章 · 获赞 1 · 访问量 2505 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: