精华内容
下载资源
问答
  • MyBatis框架介绍相关的内容不多说,这类文章网上很多,这里我着重介绍一下MyBatis下常见的SQL注入漏洞。写到一半发现有些概念要在前面说清楚一下,不然容易晕。MySQL:指MySQL办事器。MyBatis:指MyBatis框架。JDBC...

    MyBatis 是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。由于它很是灵活,很是轻量级,受到广年夜开发者的欢迎,各个年夜厂也用得比较多。MyBatis框架介绍相关的内容不多说,这类文章网上很多,这里我着重介绍一下MyBatis下常见的SQL注入漏洞。

    写到一半发现有些概念要在前面说清楚一下,不然容易晕。

    MySQL:指MySQL办事器。MyBatis:指MyBatis框架。JDBC:是Java用来规范数据库连接的接口。MySQL Connector/J:MySQL提供的、合适JDBC的、用来供java程序连接MySQL数据库的jar包。俗称:MySQL数据库驱动。

    0x01 MyBatis的SQL注入

    MyBatis支持两种参数符号,一种是#,另一种是$。

    使用参数符号#的句子:

    SELECT * FROM PERSON WHERE ID = #{id}

    MyBatis会建立一个预编译语句,生成的代码类似于

    // Similar JDBC code, NOT MyBatis…

    String selectPerson = "SELECT * FROM PERSON WHEREID=?";

    PreparedStatement ps = conn.prepareStatement(selectPerson);

    ps.setInt(1,id);

    参数会在SQL语句中用占位符”?”来标识,然后使用prepareStatement来预编译这个SQL语句。

    可是你以为这个SQL语句真的被MySQL数据库预编译了吗?naive!其实在默认情况下,MySQL Connector/J只不过是把selectPerson做了一下转义,前后加了双引号,拼接到SQL语句里面,然后再交给MySQL执行罢了

    另一种使用参数符号$时,MyBatis直接用字符串拼接把参数和SQL语句拼接在一起,然后执行。众所周知,这种情况很是危险,极容易产生SQL注入漏洞。

    在使用MyBatis框架时,有以下场景极易产生SQL注入。

    SQL语句中的一些部分,例如order by字段、表名等,是无法使用预编译语句的。这种场景极易产生SQL注入。推荐开发在Java层面做映射,设置一个字段/表名数组,仅允许用户传入索引值。这样包管传入的字段或者表名都在白名单里面。like参数注入。使用如下SQL语句可避免SQL注入like concat('%',#{title}, '%'),

    3.in之后参数的SQL注入。使用如下SQL语句可避免SQL注入

    id in

    #{item}

    0x02 x-generator的SQL注入

    为了提高开发效率,一些generator工具被开发出来,generator是一个从数据库结构 自动生成实体类、Mapper接口以及对应的XML文件的工具。常见的generator有mybatis-generator,renren-generator等。

    mybatis-generator是mybatis官方的一款generator。在mybatis-generator自动生成的SQL语句中,order by使用的是$,也就是简单的字符串拼接,这种情况下极易产生SQL注入。需要开发者特别注意。

    不过,mybatis-generator产生的like语句和in语句全部都是用的参数符号#,都是很是平安的实现。关注我 私信回复【架构】或【java】获取整个java体系的学习视频和资料以及免费的解答还会有职业生涯规划以及面试指导

    java编程——MyBatis框架中常见的SQL注入-1.jpg (41.67 KB, 下载次数: 0)

    2018-8-23 23:53 上传

    更多内容回复查看:

    游客,如果您要查看本帖隐藏内容请回复

    展开全文
  • SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。java后台防止sql注入方法:1.采用预编译语句集,它内置了...

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

    b0a4b3e6de887ff9b1e66f0d2fc9cecb.png

    java后台防止sql注入方法:

    1.采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可:String sql= "select * from users where username=? and password=?;

    PreparedStatement preState = conn.prepareStatement(sql);

    preState.setString(1, userName);

    preState.setString(2, password);

    ResultSet rs = preState.executeQuery();

    2.采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入public static String SQL(String str)

    {

    return str.replaceAll(".*([';]+|(--)+).*", " ");

    }

    userName=SQL(userName);

    password=SQL(password);

    String sql="select * from users where username='"+userName+"' and password='"+password+"' "

    Statement sta = conn.createStatement();

    ResultSet rs = sta.executeQuery(sql);

    相关推荐:《Java教程》

    展开全文
  • SQL注入是比较常见的网络攻击方式之一。它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,被不法用户钻了SQL的空子,通过SQL语句,实现无帐号登录,甚至篡改数据库。下面本篇就来给大家介绍几种java...

    SQL注入是比较常见的网络攻击方式之一。它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,被不法用户钻了SQL的空子,通过SQL语句,实现无帐号登录,甚至篡改数据库。下面本篇就来给大家介绍几种java防止sql注入的方法,希望对你们有所帮助。

    java防SQL注入,最简单的办法是杜绝SQL拼接。SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效。

    下面我们就来看看java防SQL注入的方法:

    1、采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可:String sql= "select * from users where username=? and password=?;

    PreparedStatement preState = conn.prepareStatement(sql);

    preState.setString(1, userName);

    preState.setString(2, password);

    ResultSet rs = preState.executeQuery();

    2、采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入。例:public static String SQL(String str)

    {

    return str.replaceAll(".*([';]+|(--)+).*", " ");

    }

    userName=SQL(userName);

    password=SQL(password);

    String sql="select * from users where username='"+userName+"' and password='"+password+"' "

    Statement sta = conn.createStatement();

    ResultSet rs = sta.executeQuery(sql);

    展开全文
  • 研究了常见的SQL注入检测和源代码静态分析扫描的原理,提出Java源代码SQL注入检测算法,该算法通过对Java源代码词法分析和语法分析、建立抽象语法树、定义规则、遍历语法树和跟踪等,检测Java源代码中可能的SQL注入...
  • Java 如何防止sql注入

    千次阅读 2018-10-20 00:10:51
    SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是因为程序员没有做好判断,被不法用户钻了SQL的空子,这里结合网上资料,给出java如何防止收起来注入的方法。 java 方法/...

    java 如何防止sql注入

    SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是因为程序员没有做好判断,被不法用户钻了SQL的空子,这里结合网上资料,给出java如何防止收起来注入的方法。

    • java

    方法/步骤

    1

    java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构 ,大部分的SQL注入已经挡住了, 在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数 。下面就举三个例子来说明一下:

    2

    第一种:

    采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可,如下所示:

    String sql= "select * from users where username=? and password=?";
    
    PreparedStatement preState = conn.prepareStatement(sql);
    
    preState.setString(1, userName);
    
    preState.setString(2, password);
    
    ResultSet rs = preState.executeQuery();...

    3

    第二种:

    采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入,如下所示:

    public static String TransactSQLInjection(String str)
    
    {
    
          return str.replaceAll(".*([';]+|(--)+).*", " ");
    
    }
    
    
    
    userName=TransactSQLInjection(userName);
    
    password=TransactSQLInjection(password);
    
    
    
    String sql="select * from users where username='"+userName+"' and password='"+password+"' "
    
    Statement sta = conn.createStatement();
    
    ResultSet rs = sta.executeQuery(sql);

    4

    第三种:

    使用Hibernate框架的SQL注入防范 Hibernate是目前使用最多的ORM框架,在Java Web开发中,很多时候不直接使用JDBC,而使用Hibernate来提高开发效率。

    在Hibernate中,仍然不应该通过拼接HQL的方式,而应使用参数化的方式来防范SQL注入。有两种方式,一种仍然是使用JDBC一样的占位符“?”,但更好的方式是使用Hibernate的命名参数,例如检测用户名和密码是否正确,使用Hibernate可以写成如下:

    String queryStr = “from user where username=:username ”+”password=:password”;
    
    List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();
    
    

     

    展开全文
  • SQL 注入简介:SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入:比如在一个登陆界面,要求用户...
  • SQL 注入简介:SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入:比如在一个登陆界面,要求用户...
  • SQL 注入简介:SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入:比如在一个登陆界面,要求用户...
  • 攻击者一旦利用系统中存在的SQL注入漏洞来发起攻击,在条件允许的情况下,不仅可以获取整站数据,还可通过进一步的渗透来获取服务器权限,从而进入内网。注入攻击的本质,是把用户输入的数据当做代码执行。这里有两...
  • 一、SQL注入简介SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。二、SQL注入攻击的总体思路1.寻找到SQL注入...
  • 一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。 二、SQL注入攻击的总体思路一、SQL注入...
  • Java防止SQL注入

    2017-07-28 09:13:57
     SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法 用户钻了SQL的空子,下面我们先来看下什么是SQL注入:  比如在一个登陆界面,要求用户...
  • Java防止SQL注入的方法

    千次阅读 2019-05-08 11:02:32
    一、SQL 注入简介:SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 1、比如在一个登陆界面,...
  • [摘自]SQL injection - WikipediaSQL注入,大家都不陌生,是一种常见的攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=’1’”这样的语句),有可能入侵参数检验不足的应用程序。所以...
  • SQL注入是网络攻击中最为常见的攻击方式,通过向服务器端发送恶意的SQL语句或SQL语句片段注入到服务器端的数据库查询逻辑中,改变原有的查询逻辑,从而实现类恶意读取服务器数据库数据,攻击者甚至可以利用数据库...
  • SQL 注入SQL Injection)是最常见的数据库攻击方式,和其它开发环境一样, Java 也提供了防止 SQL 注入攻击的方法。由于 JDBC 都是基于接口的设计,所以对于不同的数据库,代码基本一样,下面给出一个查询范例: ...
  • 0x01 JDBC 注入分析在Java里面常见的数据库连接方式也就那么几个,分别是JDBC,Mybatis,和Hibernate。注入常见场景分析JDBC的连接是比较繁琐的,并且是最原始的连接方式,我们来看看JDBC的最原始的连接代码Get型...
  • Java Web 防范 SQL 注入攻击

    千次阅读 2015-08-18 17:50:53
    随着 Ineternet 技术的迅猛发展,为了能更充分地使用互联网这个世界上最大的交流平台 ,许多单位或个人纷纷建立自己的网站。 但是网络为企业提供了新的机遇,但是同时它... 而 SQL 注入就是众 多风险中较为常见的一种。
  • JAVASQL注入攻击

    2019-11-10 21:12:37
    SQL注入攻击是网络中一种常见的攻击方式, 它利用程序中的疏忽,在参数中加入一些关键字对SQL语句进行更改,将密码验证部分的功能架空,从而实现无需 密码进行登录,甚至是对数据库进行破坏。在另一篇文章里提到的...
  • Java防止SQL注入

    2014-12-02 23:09:14
    SQL 注入简介: SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法 用户钻了SQL的空子,下面我们先来看下什么是SQL注入:  比如在一个登陆界面,...
  • 0x01 JDBC 注入分析在Java里面常见的数据库连接方式也就那么几个,分别是JDBC,Mybatis,和Hibernate。注入常见场景分析JDBC的连接是比较繁琐的,并且是最原始的连接方式,我们来看看JDBC的最原始的连接代码Get型...
  • Java防止SQL注入

    2016-08-03 11:23:00
    SQL 注入简介: SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法 用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 比如在一个登陆界面,...
  • JavaSQL注入

    2018-05-31 10:34:00
    SQL 注入简介: SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 比如在一个登陆界面,要求...
  • Java项目中XSS过滤器使用方法。 简单介绍: XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)缩写混淆,故将跨站脚本攻击缩写为XSS。...sql注入 所谓SQ...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 355
精华内容 142
关键字:

java常见的sql注入

java 订阅