sql注入问题

简介: sql注入问题

sql注入问题

sql存在漏洞,会导致数据泄露

web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾加上额外的sql语句,实现非法操作

SQL会被拼接

packagecom.kuang.lesson02;

importcom.kuang.lesson02.utils.JdbcUtils;

importjava.sql.Connection;

importjava.sql.ResultSet;

importjava.sql.Statement;

publicclassSQL注入 {

   publicstaticvoidmain(String[] args) {

       // login("zhangsan","123456"); // 正常登陆

       login(" 'or '1=1","123456"); // SQL 注入

       // `name` = ''

   }

   publicstaticvoidlogin(Stringusername,Stringpassword){

       Connectionconn=null;

       Statementst=null;

       ResultSetrs=null;

       try{

           conn=JdbcUtils.getConnection();

           // select * from users where name='' or '1=1' and password =

           '123456'

           Stringsql="select * from users where name='"+username+"' and

           password='"+password+"'";

           st=conn.createStatement();

           rs=st.executeQuery(sql);

           while(rs.next()){

               System.out.println(rs.getString("name"));

               System.out.println(rs.getString("password"));

               System.out.println("==============");

           }

        }catch (Exceptione) {

            e.printStackTrace();

        }finally{

            JdbcUtils.release(conn, st, rs);

        }

   }

}

prepareStatement

  • 是Statement的子类
  • 可以避免sql注入的问题
  • 通过Connection.preparedStatement()方法获得
  • 可以对sql进行预编译,从而提高数据库的执行效率
  • 允许使用占位符替换sql语句中的参数

1.插入数据

packagecom.kuang.lesson03;

importcom.kuang.lesson02.utils.JdbcUtils;

importjava.sql.Connection;

importjava.util.Date;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

publicclassTestInsert {

   publicstaticvoidmain(String[] args) {

       Connectionconn=null;

       PreparedStatementst=null;

       ResultSetrs=null;

       try{

           //获取一个数据库连接

           conn=JdbcUtils.getConnection();

           //要执行的SQL命令,SQL中的参数使用?作为占位符

           Stringsql="insert into users(id,name,password,email,birthday)

           values(?,?,?,?,?)";

           //通过conn对象获取负责执行SQL命令的prepareStatement对象

           st=conn.prepareStatement(sql);

           //为SQL语句中的参数赋值,注意,索引是从1开始的

           st.setInt(1, 4);//id是int类型的

           st.setString(2, "kuangshen");//name是varchar(字符串类型)

           st.setString(3, "123");//password是varchar(字符串类型)

           st.setString(4, "24736743@qq.com");//email是varchar(字符串类型)

           st.setDate(5, newjava.sql.Date(new

           Date().getTime()));//birthday是date类型

           //执行插入操作,executeUpdate方法返回成功的条数

           intnum=st.executeUpdate();

           if(num>0){

               System.out.println("插入成功!!");

           }

       }catch (Exceptione) {

            e.printStackTrace();

        }finally{

           //SQL执行完成之后释放相关资源

           JdbcUtils.release(conn, st, rs);

       }

   }

}


相关文章
|
1天前
|
SQL 安全
jeecg-boot sql注入漏洞解决
jeecg-boot sql注入漏洞解决
|
3天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
12 0
|
5天前
|
SQL 安全 关系型数据库
SQL 注入神器:SQLMap 参数详解
SQL 注入神器:SQLMap 参数详解
|
11天前
|
SQL 存储 Java
如何避免SQL注入?
【4月更文挑战第30天】如何避免SQL注入?
23 0
|
11天前
|
SQL 安全 PHP
【PHP 开发专栏】PHP 防止 SQL 注入的方
【4月更文挑战第30天】本文介绍了PHP防止SQL注入的策略,包括理解SQL注入的原理和危害,如数据泄露和系统控制。推荐使用参数化查询(如PDO扩展)、过滤和验证用户输入,以及选择安全的框架和库(如Laravel)。此外,强调了保持警惕、定期更新维护和开发人员安全培训的重要性,以确保应用安全。
|
11天前
|
SQL 存储 安全
|
11天前
|
SQL Oracle 关系型数据库
常见 SQL 注入绕过方法
常见 SQL 注入绕过方法
|
11天前
|
SQL Oracle 关系型数据库
利用 SQL 注入提取数据方法总结
利用 SQL 注入提取数据方法总结
|
11天前
|
SQL 关系型数据库 MySQL
利用 SQL 注入识别数据库方法总结
利用 SQL 注入识别数据库方法总结
|
11天前
|
SQL Oracle Java
SQL 注入神器:jSQL Injection 保姆级教程
SQL 注入神器:jSQL Injection 保姆级教程