-
java mysql sql注入_java编程——MyBatis框架中常见的SQL注入
2021-02-01 05:52:57MyBatis框架介绍相关的内容不多说,这类文章网上很多,这里我着重介绍一下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注入 java_java怎么防止sql注入?
2021-02-27 10:03:06SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。java后台防止sql注入方法:1.采用预编译语句集,它内置了...SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过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);
相关推荐:《Java教程》
-
java开发中推荐的防御sql注入方法_java如何防止sql注入
2020-12-31 09:42:41SQL注入是比较常见的网络攻击方式之一。它不是利用操作系统的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);
-
基于静态分析的Java源代码SQL注入检测算法
2020-10-17 20:25:42研究了常见的SQL注入检测和源代码静态分析扫描的原理,提出Java源代码SQL注入检测算法,该算法通过对Java源代码词法分析和语法分析、建立抽象语法树、定义规则、遍历语法树和跟踪等,检测Java源代码中可能的SQL注入... -
Java 如何防止sql注入
2018-10-20 00:10:51SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是因为程序员没有做好判断,被不法用户钻了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注入 java_转 Java防止SQL注入
2021-02-12 13:23:33SQL 注入简介:SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入:比如在一个登陆界面,要求用户... -
java开发中推荐的防御sql注入方法_Java 防SQL注入
2021-01-13 17:54:28SQL 注入简介:SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入:比如在一个登陆界面,要求用户... -
java开发中推荐的防御sql注入方法_Java防止SQL注入
2020-12-31 09:42:36SQL 注入简介:SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入:比如在一个登陆界面,要求用户... -
mybatis java sql注入_Java框架之MybatisSQL注入漏洞
2021-02-26 12:22:53攻击者一旦利用系统中存在的SQL注入漏洞来发起攻击,在条件允许的情况下,不仅可以获取整站数据,还可通过进一步的渗透来获取服务器权限,从而进入内网。注入攻击的本质,是把用户输入的数据当做代码执行。这里有两... -
java开发中推荐的防御sql注入方法_Java防止SQL注入(转)
2020-12-31 09:42:22一、SQL注入简介SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。二、SQL注入攻击的总体思路1.寻找到SQL注入... -
java开发中推荐的防御sql注入方法_java 防止sql注入的方法(非原创)
2020-12-31 09:42:37一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。 二、SQL注入攻击的总体思路一、SQL注入... -
Java防止SQL注入
2017-07-28 09:13:57SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法 用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 比如在一个登陆界面,要求用户... -
Java防止SQL注入的方法
2019-05-08 11:02:32一、SQL 注入简介:SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 1、比如在一个登陆界面,... -
mybatis java sql注入_mybatis 防止sql注入
2021-02-26 12:22:10[摘自]SQL injection - WikipediaSQL注入,大家都不陌生,是一种常见的攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=’1’”这样的语句),有可能入侵参数检验不足的应用程序。所以... -
【JAVA-WEB常见漏洞-SQL注入漏洞】
2020-11-23 15:58:59SQL注入是网络攻击中最为常见的攻击方式,通过向服务器端发送恶意的SQL语句或SQL语句片段注入到服务器端的数据库查询逻辑中,改变原有的查询逻辑,从而实现类恶意读取服务器数据库数据,攻击者甚至可以利用数据库... -
在 Java 中防止 SQL 注入攻击(SQL Injection)的方法
2012-02-09 09:52:55SQL 注入(SQL Injection)是最常见的数据库攻击方式,和其它开发环境一样, Java 也提供了防止 SQL 注入攻击的方法。由于 JDBC 都是基于接口的设计,所以对于不同的数据库,代码基本一样,下面给出一个查询范例: ... -
service注入为null_Java审计之SQL注入篇
2020-11-21 21:57:360x01 JDBC 注入分析在Java里面常见的数据库连接方式也就那么几个,分别是JDBC,Mybatis,和Hibernate。注入常见场景分析JDBC的连接是比较繁琐的,并且是最原始的连接方式,我们来看看JDBC的最原始的连接代码Get型... -
Java Web 防范 SQL 注入攻击
2015-08-18 17:50:53随着 Ineternet 技术的迅猛发展,为了能更充分地使用互联网这个世界上最大的交流平台 ,许多单位或个人纷纷建立自己的网站。 但是网络为企业提供了新的机遇,但是同时它... 而 SQL 注入就是众 多风险中较为常见的一种。 -
JAVA中的防SQL注入攻击
2019-11-10 21:12:37SQL注入攻击是网络中一种常见的攻击方式, 它利用程序中的疏忽,在参数中加入一些关键字对SQL语句进行更改,将密码验证部分的功能架空,从而实现无需 密码进行登录,甚至是对数据库进行破坏。在另一篇文章里提到的... -
Java防止SQL注入
2014-12-02 23:09:14SQL 注入简介: SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法 用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 比如在一个登陆界面,... -
java 拼接路径优雅方式_Java审计之SQL注入篇
2020-12-30 15:16:240x01 JDBC 注入分析在Java里面常见的数据库连接方式也就那么几个,分别是JDBC,Mybatis,和Hibernate。注入常见场景分析JDBC的连接是比较繁琐的,并且是最原始的连接方式,我们来看看JDBC的最原始的连接代码Get型... -
转 Java防止SQL注入
2016-08-03 11:23:00SQL 注入简介: SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法 用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 比如在一个登陆界面,... -
Java防SQL注入
2018-05-31 10:34:00SQL 注入简介: SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 比如在一个登陆界面,要求... -
XSS过滤JAVA过滤器filter 防止常见SQL注入
2019-10-29 09:06:40Java项目中XSS过滤器的使用方法。 简单介绍: XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。...sql注入 所谓SQ...
-
InPixio Photo Maximizer Pro(图片无损放大器软件)直装特别版V5.11.7612.27781
-
西方文化史复习资料与考点整理.pdf
-
cannot find output in imported module librosa报错解决
-
宪法学--期末复习知识点总结.pdf
-
微慕博客小程序开源版二次美化
-
浙江科技学院《抗震》知识点总结.pdf
-
Docker从入门到精通
-
浙江科技学院《电工学》复习资料(含答案).pdf
-
燕山大学《线性代数》期末考试(含答案).pdf
-
react全家桶都有什么
-
2021-03-03
-
Java 9 逆天的十大新特性
-
使用PHPWord生成word文档
-
PHP超全局变量
-
PHP修改php.ini中关于文件上传大小的配置项
-
岳阳职业技术学院《电力电子技术》试卷库(多套试卷且含答案).pdf
-
css3 sticky不生效怎么办
-
西南科技大学《自动控制原理》试题库(含答案).pdf
-
浙江科技学院土木工程材料试题.pdf
-
2021-03-03