(一)Mybatis注入问题

Mybatis是目前比较常用的ORM的框架,一般与SpringMVC框架整合较多,但使用不当会有SQL注入的风险。

Mybatis里mapper中SQL语句的写法支持两种形式的占位符,一种是#{value}一种是${value}.

使用#进行占位时,如:

<selectid="selectUsername"resultType="com.example.bean.Admin">

select * from admin where username='#{username}'

</select>

内部实现是使用了JDBC预编译技术:

String sql = “select * from admin where username=?” ;

PreparedSatement ps = conn.prepareStatement(sql) ;

Ps.setString(“admin”, username) ;

但是使用$进行占位时,在内部实现中是字符串拼接:

<selectid="selectUsername"resultType="com.example.bean.Admin">

select * from admin where username='${value}'

</select>

代码测试一下:

如果使用$占位符,是存在SQL注入风险的,一旦没有经过校验就会有风险。

因此,在审计中,一般要看mapper.xml或者一些实现的Mapper接口中的注解里是否有使用$占位符的情况,如果使用了则说明很大几率会有问题。

(二)Hibernet注入问题

Hibernet框架同样都支持SQL语句拼接的情况,看以下代码:

这里的input参数使用的拼接的方式进入了查询中,明显是有问题的,可以带入单引号引发注入漏洞。

安全的方式是使用占位符的方式,然后使用setXXX来填补占位符,内部实现是基于预编译的,这样就不会存在注入了。

(三)SpringMVC框架XSS问题

SpringMVC并没有针对XSS进行统一的解决,因此寻找代码安全问题和传统的审计思路一致。

比如:

当SpringMVC和其他第三方模板进行整合时,比如和Freemarker进行整合,模板是不会对绑定数据进行自动净化处理的,因此也会存在XSS问题。

(四)Freemarker模板注入问题

目前比较流行的Freemarker和Velocity都有模板注入漏洞,可以直接执行系统命令或者getshell。

SpringMVC与Freemarker整合,当用户可以控制模板文件内容,包含但不限于编辑自定义模板、用户输入拼接在模板串中等:

CreateHtmlFromString的代码如下,即编译给定的模板字符串和数据,生成HTML进行输出:

当username为恶意模板语法时,会产生服务器端攻击,包括但不限于命令执行、getshell等:

新建一个FreemarkerView,可以参考

org.springframework.web.servlet.view.freemarker.FreeMarkerView的实现,然后在

initApplicationContext方法中加入下面两行代码:

(五)spring jpa

@Autowired
private EntityManager emf ;

利用的EntityManager做原始的SQL语句拼接。

 

阅读全文    

Java框架安全的更多相关文章

  1. 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)

    原文链接:http://www.cnblogs.com/outlooking/p/5243415.html 设置步骤如下: 1.点 “window”-> "Preferences&qu ...

  2. Java框架介绍-13个不容错过的框架项目

    本文转自互联网,个人收藏所用. 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需.不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术. ...

  3. 如何查看JDK以及JAVA框架的源码

    如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> &q ...

  4. 对java框架的几点认识

    java框架实在是太多了,网上一抄一大段,根本就了解不到什么.我还是以我的经验来说一下j2ee的框架.1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一个MV ...

  5. 最简单的Java框架

    框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...

  6. 2016年7款最流行的Java框架

    虽然Java一直被唱衰,但是直到现在Java也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,所以我们为大家搜集了一些目前比较受欢迎的Java框架的消息. 根据RebelLabs对在 ...

  7. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

  8. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  9. Java框架spring 学习笔记(十四):注解aop操作

    回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...

  10. Redis 分布式缓存 Java 框架

    为什么要在 Java 分布式应用程序中使用缓存? 在提高应用程序速度和性能上,每一毫秒都很重要.根据谷歌的一项研究,假如一个网站在3秒钟或更短时间内没有加载成功,会有 53% 的手机用户会离开. 缓存 ...

随机推荐

  1. 用淘宝镜像安装electron的方法

    在网友那里看到的,命令如下,亲测安装electron 1.7.9 成功,关键是几秒钟就搞定了.今天是 11 Dec 2017. ELECTRON_MIRROR=http://npm.taobao.or ...

  2. Linq 与 Lambda 简单使用

    //Lambda表达式详解 //int //List<int> numbers = new List<int> {1,2,3,4,5,6,7,8,9 }; //var n = ...

  3. QWebView使用

      问题: 开始编译的时候在pro文件中要加上 QT += core gui webkitwidgets 文件使用部分加上 #include<QtWebKitWidgets/QWebView&g ...

  4. mysql大数据表删除操作锁表,导致其他线程等待锁超时(Lock wait timeout exceeded; try restarting transaction;)

    背景: 1.有一个定时任务,每10分钟入一批统计数据: 2.另一个定时任务,每天定时清理7天前数据,此定时任务每天01:18:00执行: 现象: 每天01:20:00的统计数据入库失败,异常信息如下, ...

  5. 三大视频网站Url的处理保存(视频和图片二选一操作)

    前台Js // 视频处理 var textVideoLink=$("input[name='textVideoLink']").val(); // 去除所有有的引号和空格 var ...

  6. How to Configure Tomcat/JBoss and Apache HTTPD for Load Balancing and Failover

    http://java.dzone.com/articles/how-configure-tomcatjboss-and In this post we will see how to setup a ...

  7. BNU29376——沙漠之旅——————【技巧题】

    沙漠之旅 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: M ...

  8. bzoj 5302: [Haoi2018]奇怪的背包

    Description Solution 首先 \(v_1,v_2,v_3...v_n,P\) 能够构成的最小数是 \(gcd(P,v_1,v_2,v_3...v_n)\) 然后 \(gcd(P,v_ ...

  9. 【shell】《shell学习指南》读书笔记

    一.使用shell脚本 优点:脚本语言能够轻易处理文件与目录之间的对象,如把文件从所有目录拷贝到另一个目录 缺点:效率不如编译型语言 二.简单的脚本 1.查看现在系统有谁登录 $who 2.算出行数 ...

  10. 前端测试框架 puppeteer 文档翻译

    puppeteer puppeteer 是一个通过DevTools 协议提供高级API 来控制 chrome,chromium 的 NODE库; puppeteer默认运行在 headless 模式, ...