流浪のwolf

卷帝

导航

什么是SQL注入并解决

' or ' 1 ' = ' 1

原理:通过违规的字符串改变原来的SQL语句 ;【将敏感字符进行转义】

// 包名
package com.zhulx.JDBC;

// 导入实例类

import com.zhulx.pojo.Account;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 *  JDBC 快速入门
 * **/
public class JDBC03 {
    // throws Exception 说明此方法不会处理异常
    public static void main(String[] args) throws Exception {
        // TODO 用户登录逻辑判断
        // 用户登录
        // 2. 获取连接 【 就是关联数据库 】 访问  test 数据库
        String url = "jdbc:mysql://127.0.0.1:3306/tb_user";
        String username = "root";
        String password = "abc123";
        Connection conn =  DriverManager.getConnection(url, username, password);
        // 前端用户输入的用户名和密码
        // 单引号是字符 双引号是字符串
        String name = "zhulongxu";
        String pwd = "123456";
        name = "dasfjalhsdf";
        pwd = "' or ' 1 ' = ' 1 ";

        // 3. 定义 sql  DQL
        // String sql = "select * from user_table where username='"+name+"' and password = '"+pwd+"'";
        // 3. prepareStatment定义 SQL 语句的写法
        String sql = "select * from user_table where username = ? and password = ?";

        // 4. 获取执行 sql 对象 statement
        // Statement stmt = conn.createStatement() ;
        // 4. prepareStatment 获取 pstmt 对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        // 5. 设置 ? 的值  1 2 都是参数索引, 1 表示第一个 ?
        // 原来 ' or ' 1 ' = ' 1 的字符串通过 prepareStatement 把单引号转义了 ‘/’ 就不再是违法的字符串了【‘】
        pstmt.setString(1, name);
        pstmt.setString(2,pwd);
        // SQL 注入原理:就是通过字符串的拼接和关键字符串把原本的SQL语句给改变了
        // prepareStatement 的作用:避免SQL注入攻击


        // 5. 执行 sql  【返回值是受影响的行数】
        // ResultSet rs  = stmt.executeQuery(sql);
        // 5. preparestatement 执行 sql
        ResultSet rs = pstmt.executeQuery();

       // 6. 判断是否登录成功 如果在数据库找到了这个用户说明登录成功   rs.next() 是否获取到了数据
        // // System.out.println(rs.next());   // true
        if(rs.next()) {
            System.out.println(name);
            System.out.println(pwd);
            System.out.println(sql);
            System.out.println("登录成功");
        }else {
            System.out.println(name);
            System.out.println(pwd);
            System.out.println("登录失败");
        }

        // 7. 释放资源
        pstmt.close();
        conn.close();
        rs.close();
    }
}

 

posted on 2023-03-18 08:39  流浪のwolf  阅读(13)  评论(0编辑  收藏  举报