SQL注入问题

作者:神秘网友 发布时间:2020-10-12 14:35:41

SQL注入问题

SQL注入问题

SQL注入问题

  • SQL注入攻击是指利用SQL漏洞越权获取数据的黑客行为
  • SQL注入攻击根源是为对原始SQL中的敏感字符作特殊处理
  • 解决方法:放弃Statement改用PreparedStatement处理SQL
package com.imooc.jdbc.hrapp.command;

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

/**
 * @author CubeMonkey
 * @create 2020-10-09 13:59
 */
public class QueryCommand implements Command {
    @Override
    public void execute() {
        System.out.println("请输入部门名称:");
        Scanner in = new Scanner(System.in);
        String pdname = in.nextLine();
        Connection connection = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1.加载并注册JDBC驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
            String username = "root";
            String password = "root";
            //2.创建数据库连接
            connection = DriverManager.getConnection(url, username, password);
            //创建Statement对象
            stmt = connection.createStatement();
            //结果集
            rs = stmt.executeQuery("select * from employee where dname = '" + pdname + "'");
            System.out.println("select * from employee where dname = '" + pdname + "'");
            //4.遍历查询结果
            /**
             * rs.next()返回布尔值,代表是否存在下一条记录
             * 如果有,返回true,同时结果集提取下一条记录
             * 如果没有,返回false,循环停止
             */
            while(rs.next()){
                int eno = rs.getInt("eno");
                String ename = rs.getString("ename");
                float salary = rs.getFloat("salary");
                String dname = rs.getString("dname");
                System.out.println(dname + "-" + eno + "-" + ename + "-" +salary);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //5.关闭连接,释放资源
            if (rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            try {
                if (connection != null && !connection.isClosed()){
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

? SQL注入问题

?

? 再输入’ or 1=1 or 1=‘后,查询的语句就变成了select * from employee where dname = ‘’ or 1=1 or 1=’’ ,这里的where条件dname = “” or 1 = 1 or 1 = ""是很成立的,所以再查询的结果中会输出所有的信息。出现这种情况的根本原因在于没有对单引号这样的特殊字符进行处理,单引号会作为sql语句的一部分出现,MySQL也会对其进行解析

SQL注入问题相关教程

  1. QT连接Mysql简便方法和遭遇的那些坑

    QT连接Mysql简便方法和遭遇的那些坑 说一说遭遇 QT连接Mysql!整整三天!浏览了无数帖子,QT和Mysql也是装了卸,卸了又装,无非就是让你先编译自己的mysql驱动,再把那两个动态连接库添加到Qt的bin目录下,然后就ok了,思路很清晰,可惜就是达不到帖子上说的

  2. zabbix 监控mysql

    zabbix 监控mysql zabbix部署文档 zabbix部署完之后 zabbix-agent操作 [[emailprotected] ~]# yum -y install mariadb mariadb-server 在zabbix-agent先授权个用户 不然测试时没有权限 [[emailprotected] ~]# mysqlWelcome to the MariaDB monitor. Commands

  3. mysql安装以及配置外网权限(win)

    mysql安装以及配置外网权限(win) 1.下载地址:https://dev.mysql.com/downloads/mysql/ 默认是最新的版本,如果需要其他版本选择Archives,笔者选择了比较稳定的mysql5.7系列的产品线。选择原因是适配公司产品的pyqt5控件的需要,此处略去四个字… 这是一个64

  4. 《MSSQL2008高级教程》之三动态SQL语句

    《MSSQL2008高级教程》之三“动态SQL语句”

  5. MySQL 使用分区表小结

    MySQL 使用分区表小结 公司用数据库时,部分表涉及到了分区表的概念,赶紧学习一下 分区表是根据某种方式进行分区,逻辑上依然是一张表 首先我们要创建一张范围分区表,根据id进行分区(不推荐,最好是根据时间) CREATE TABLE employees ( id INT NOT NULL A

  6. Navicat 中mysql查询使用占位符

    Navicat 中mysql查询使用占位符 在navicat中,写了一堆sql,里面有同一个字段,这个时候可以使用占位符号,点击运行的时候,填写变量值,即可全都替换陈需要的值,节省一个个去替换的时间。 变量用:[$变量名] 如: select * from score where score=[$bame];

  7. 遗传算法基础(Genetic Algorithm含Tictactoe问题的解决)

    遗传算法基础(Genetic Algorithm含Tictactoe问题的解决) Contents 1 概述 2 基本概念 3 基础算法 3.1 基础框架 3.2 主要步骤 3.3 基本算法 4 理论基础 参考文献 1 概述 遗传算法属于 演化计算 的一个分支。演化计算是一种模拟生物进化机制的通用问题求解方

  8. 项目实战-物联网平台搭建-EMQ x数据转存mysql(二)

    项目实战-物联网平台搭建-EMQ x数据转存mysql(二) 首先安装mysql 官网下载安装mysql-server # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -ivh mysql-community-release-el7-5.noarch.rpm # yum install mysql-communi