ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql注入漏洞

2022-05-06 07:32:31  阅读:238  来源: 互联网

标签:语句 漏洞 sql mybatis parameter select 注入


数据的CIA保护

Confidentiality:机密性指只有授权用户可以获取信息。

Integrity:完整性指信息在输入和传输的过程中,不被非法授权修改和破坏,保证数据的一致性。

Availability:可用性指保证合法用户对信息和资源的使用不会被不正当地拒绝。

三种sql语言

DML database manipulation language 数据库操作语言
  select , insert , update , delete 等
  当攻击者使用DML语言是,就违反了数据的保密性和完整性(update)。

DDL database definition language 数据库定义语言
  攻击者使用DDL违反了数据的完整性(alert)和可用性(drop)

DCL database control language 数据库操作语言
  数据控制语言用于创建权限,以允许用户访问和操作数据库。
  
   攻击者使用DCL违反了数据的 保密性(grant) 可用性(revoke)。

sql注入的实现

JDBC和sql注入

    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        //代表外部输入的参数
        String parameter = "tom' union select null,null from dual'";

        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/STOREDB", "root", "root");

        //此种方式直接拼接sql,无法防止sql注入的攻击
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("select username,password from user where username='" + parameter + "'");

        //使用预编译的方式, ? 是占位符,这种方式是可以防止sql注入攻击的。
        PreparedStatement preparedStatement = connection.prepareStatement("select * from user where userName=?");
        preparedStatement.setString(1, parameter);
        ResultSet resultSet1 = preparedStatement.executeQuery();
    }

mybatis框架和sql注入

mybatis框架的思想是将sql语句编入 到配置文件中,避免sql语句在java程序中大量出现,方便后续对sql语句的修改和配置。

正确的使用mybatis框架可以有效的防止sql注入的发生。

在mybatis中使用parameterType向sql语句传入参数,在sql引用传参可以使用#{parameter}和${parameter}两种方式

#$的区别

  • #{ }号会点语句进行预编译,在mybatis的debug模式下,sql语句在执行的情况下回打印使用。占位符的sql语句,这防止了sql的注入。
  • ${ }只是进行string 替换,动态解析SQL的时候会进行变量替换

hibernate框架

标签:语句,漏洞,sql,mybatis,parameter,select,注入
来源: https://www.cnblogs.com/sinosecurity/p/16227187.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有