SQL注入

MySQL 数据库学习笔记(续)

十、JDBC 重点!!!

10.6 SQL注入问题

SQL存在漏洞,会被攻击导致数据泄露
SQL会被拼接

package com.guo.lesson02;

import com.guo.lesson02.utils.JdbcUtils;

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

public class SQL注入 {
    public static void main(String[] args) {

        //login("chenguo","123456");                       // 正常登录
        login(" 'or '1=1"," 'or '1=1");   // 技巧

    }

    //登录业务
    public static void login(String username,String password){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtils.getConnection();
            st = conn.createStatement();

            //SQL
            // SELECT * FROM users WHERE `NAME` = 'chenguo' AND `PASSWORD` = '123456'
            // SELECT * FROM users WHERE `NAME` = ''or '1=1' AND `PASSWORD` = ''or '1=1'
            String sql = "SELECT * FROM users WHERE `NAME` = '"+username+"' AND `PASSWORD` ='"+password+"'";

            rs = st.executeQuery(sql); //查询完毕会返回一个结果集

            while (rs.next()){
                System.out.println(rs.getString("NAME"));
                System.out.println(rs.getString("PASSWORD"));
                System.out.println("==================================");
            }


        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            JdbcUtils.release(conn,st,rs);
        }
    }
}

总结

  1. SQL 注入本质:直接拼接字符串,攻击者通过构造特殊参数篡改 SQL 逻辑
  2. 漏洞危害:无需正确账号密码即可登录、查询全部数据
  3. 根本原因:使用 Statement + 字符串拼接执行 SQL
  4. 解决方案:使用 PreparedStatement(预处理对象)防止注入
posted @ 2026-04-15 17:16  果子同志  阅读(1)  评论(0)    收藏  举报