首页 > 数据库 >JDBC之Sql注入问题

JDBC之Sql注入问题

时间:2023-01-28 11:34:20浏览次数:57  
标签:JDBC String Sql resultSet System sql println out 注入

JDBC之Sql注入问题

用户输入的数据包括sql关键字或者语法,导致sql查询时where后面的条件固定为true

sql注入的语法

1.用户名+‘+or 1=1;#

案例

package com.qf.JDBC;

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

public class TestJDBC2 {
   public static void main(String[] args) throws Exception{
       //1,注册驱动
       Class.forName("com.mysql.jdbc.Driver");
       //2.获得连接
       String url="jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC";
       String user="root";
       String password = "123456";
       Connection connection = DriverManager.getConnection(url,user,password);
       if(connection==null){
           System.out.println("连接失败");
      }else{
           System.out.println("连接成功");
      }
       System.out.println("sql注入语法:");
       System.out.println("abc' or 1=1;#");
       Scanner scanner = new Scanner(System.in);
       System.out.println("请输入名字:");
       String name = scanner.nextLine();//next遇到空格结束,nextline能读取空格
       System.out.println("请输入钱数:");
       String money = scanner.nextLine();

       //3.获得执行Sql语句的对象
       Statement statement = connection.createStatement();
       //4.执行查询语句(这里被sql注入),sql注入后不需要正确的数据仍能进行查询操作.
       //sql注入,用户输入的数据包括sql关键字或者语法,导致编译后where后的条件为true
       //String sql = "select * from accounts where name='A' and money='1000'";
       String sql = "select * from accounts where name='"+name+"' and money='"+money+"'";
       ResultSet resultSet = statement.executeQuery(sql);
       if (resultSet.next()){
           System.out.println("登陆成功");
      }else{
           System.out.println("登录失败");
      }
       while (resultSet.next()){

           String id = resultSet.getString(1);//String id = resultSet.getString(id);
           String name1 = resultSet.getString(2);
           String money2 = resultSet.getString(3);
           System.out.println(id+"\t"+name1+"\t"+money2);
      }
  }
}

输入数据

名字:abc' or 1=1;#

钱数:123123123124142

运行结果

连接成功 sql注入语法: abc' or 1=1;# 请输入名字: abc' or 1=1;# 请输入钱数: 12321314 登陆成功 2 B 1000.0 3 C 1000.0 4 null null 5 null null 6 A 1000.0 7 B 1000.0 8 C 1000.0 10 zht 1234.0 12 zht 1234.0 13 zht 1234.0 14 zht 1234.0

Process finished with exit code 0

 

标签:JDBC,String,Sql,resultSet,System,sql,println,out,注入
From: https://www.cnblogs.com/zhangtiedangg/p/17069945.html

相关文章

  • MySQL索引底层探究
    一、什么是索引?索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引是一种数据结构。数据库索引,是数据库......
  • Springboot + Vue ElementUI 实现MySQL可视化
    一、功能展示:效果如图: DB连接配置维护:  Schema功能:集成Screw生成文档,导出库的表结构,导出表结构和数据  表对象操作:翻页查询,查看创建SQL,生成代码可以单个代......
  • Oracle根据符号分隔字段内字符串后SQL查询数据方法
    --从WITH函数子查询中获取需要的数据SELECTCOUNT(*)FROMCT_BC_BUSINESSCARDFLOWt1WHEREt1.CFSerialNumberNOTIN(--利用WITH函数实现子查询(当做内联视图或者临......
  • MySql分库分表
    MySql分库分表分库分表策略当数据量达到一定程度时,我们出于性能考虑就需要将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果......
  • EAS查找/停止正在运行的后台事务SQL语句
    EAS查找正在运行的后台事务SQL语句select*fromT_job_instwhereFSTATE='Running'andFTITLELIKE'%商务卡%'EAS停止正在运行的后台事务SQL语句updateT_job_ins......
  • MySQL 索引的缺陷和注意事项
    一、索引存在的缺陷1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE;因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件2.......
  • DATETIME和INTERVAL的ANSI SQL标准格式
    TheANSISQLstandardsspecifyqualifiersandformatsforcharacterrepresentationsofDATETIMEandINTERVALvalues.ThestandardqualifierforaDATETIMEvalue......
  • postgresql/lightdb中WHERE CURRENT OF的使用
    最近看PG源码,在语法分析中有看到CURRENTOF元素。在PG游标中,WHERECURRENTOF可以用来使用游标更新或删除当前指向的行。语法:​​UPDATEtableSET...WHERECURRENTOFcu......
  • postgresql/lightdb中对应ctas的select into
    在postgresql/lightdb中,可以使用​​SELECTINTO(它不是ISOSQL的一部分,但是因为历史原因存在)​​​创建一个新表并且用一个查询计算得到的数据填充它。这些数据不会像......
  • sql基础之from和ansi join一起使用(parse)总结
    createtabletemp1(aidVARCHAR(5)notnull,carVARCHAR(10)notnull);createtabletemp2(bidVARCHAR(5)notnull,usernameVARCH......