JDBC中的sql注入问题

news/2024/5/19 0:49:25 标签: 数据库, mysql, sql, jdbc
  • SQL注入

      SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,
      攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,
      在管理员不知情的情况下实现非法操作,
      以此来实现欺骗数据库服务器执行非授权的任意查询,
      从而进一步得到相应的数据信息。
      该问题存在于Statement接口中
      在它的子接口PreparedStatement中该问题得到了解决
      那我们就在使用Statement接口的情况下展示sql注入
    
  • 原表数据
    原表

  • 根据账户密码查询该人信息

package com.mystudy.jdbc;

import java.sql.*;

public class SqlInject {
    public static void login(String username,String password) throws ClassNotFoundException, SQLException {
        //forName抛出异常 ClassNotFoundException
        Class.forName("com.sql>mysql.jdbc.Driver");
        //getConnection 抛出异常SQLException
        Connection conn= DriverManager.getConnection("jdbc:sql>mysql://localhost:3306/test1?useSSL=true","root","root");
        Statement st=conn.createStatement();
        String sql ="SELECT * FROM student where stu_user='"+username+"' and stu_password='"+password+"'";
        ResultSet rs=st.executeQuery(sql);
        while (rs.next()){
            System.out.print(rs.getInt(1));
            System.out.print(rs.getString(2));
            System.out.print(rs.getString(3));
            System.out.print(rs.getDate(4));
            System.out.print(rs.getString(5));
            System.out.println(rs.getString(6));
        }
        //资源释放
        rs.close();
        st.close();
        conn.close();
    }
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        login("hhh","123456");
    }
}


结果:
正常登录查询结果

  • sql注入情况
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
      //login("hhh","123456");
        login("'or'1=1", "'or'1=1");
    }

结果:盗出了所有用户信息
<a class=sql注入后的登录查询结果" />

代码解释:

  • 正常情况下:
    "SELECT * FROM student where stu_user='"+username+"' and stu_password='"+password+"'"
    login("hhh","123456");带入
    "SELECT * FROM student where stu_user='hhh' and stu_password='123456'"
  • sql注入情况登录:
    "SELECT * FROM student where stu_user='"+username+"' and stu_password='"+password+"'"
    login("'or'1=1", "'or'1=1");带入
    "SELECT * FROM student where stu_user=''or'1=1' and stu_password=''or'1=1'"
  • 这里建议再学习一下事务回滚:事务回滚
  • 这里有JDBC的入门学习流程:入门学习流程

http://www.niftyadmin.cn/n/1674948.html

相关文章

Flink结合canal同步到Hbase

企业运维的数据库最常见的是mysql&#xff1b;但是mysql有个缺陷&#xff1a;当数据量达到千万条的时候&#xff0c;mysql的相关操作会变的非常迟缓&#xff1b; 如果这个时候有需求需要实时展示数据&#xff1b;对于mysql来说是一种灾难&#xff1b;而且对于mysql来说&#x…

echarts示例_可视化工具ECharts入门

// 1.导入echartsimport echarts from echarts<div id"main" style"width:600px;height:400px;">div>//此时页面上的元素已经被渲染完毕了mounted() {// 3.基于准备好的dom,初始化echarts实例var myChart echarts.init(document.getElementById(…

兄弟三人去看灯瘸子_重庆修蓄水池7人遇难 幸存者:4兄弟只剩我一人

来源&#xff1a;红星新闻(原标题&#xff1a;一氧化碳中毒致修蓄水池7人遇难 幸存者&#xff1a;4兄弟只剩我一人)6月30日,重庆石柱县桥头镇发生一起事故&#xff0c;7名村民在修理水池时遇难。7月3日上午&#xff0c;红星新闻记者从石柱县县委宣传部获悉&#xff0c;经相关部…

Java周总结

然后使用这些知识做了一个简易的征兵注册登录系统&#xff0c;献丑。。

JDBC中?占位符的设置

jdbc中的插入为例使用&#xff1f;占位符 package com.mystudy.jdbc;import java.sql.*; import java.util.Date;public class PlaceHolder {public static void main(String[] args) throws ClassNotFoundException, SQLException {//加载驱动//forName抛出异常 ClassNotFou…

linux中getopt的用法

http://apps.hi.baidu.com/share/detail/17204074 getopt被用来解析命令行选项参数。就不用自己写东东处理argv了。 #include <unistd.h> extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时&#xff0c;从optind存储…

from . import_Web前端基础教程:import,export深入理解

Web前端基础教程,import,export在shell中执行程序时&#xff0c;shell会提供一组环境变量。export可新增&#xff0c;修改或删除环境变量&#xff0c;供后续执行的程序使用。export的效力仅及于该次登录操作。export最正常:varfirstNameMichael;varlastNameJackson;varyear1958…

升级spark2.1为2.2

spark官网在documations看spark2.2的介绍&#xff0c;在more里面有个buliding spark(编译spark)&#xff0c;需要使用maven 3.3.9或更新&#xff0c;jdk1.7的支持被移除了&#xff0c;需要使用1.8. 所以升级需要将环境变量里面的java_home指向jdk1.8的路径&#xff0c;spark_ho…