Java框架安全
(一)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框架安全的更多相关文章
- 如何在Eclipse中查看JDK以及JAVA框架的源码(转载)
原文链接:http://www.cnblogs.com/outlooking/p/5243415.html 设置步骤如下: 1.点 “window”-> "Preferences&qu ...
- Java框架介绍-13个不容错过的框架项目
本文转自互联网,个人收藏所用. 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需.不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术. ...
- 如何查看JDK以及JAVA框架的源码
如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> &q ...
- 对java框架的几点认识
java框架实在是太多了,网上一抄一大段,根本就了解不到什么.我还是以我的经验来说一下j2ee的框架.1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一个MV ...
- 最简单的Java框架
框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...
- 2016年7款最流行的Java框架
虽然Java一直被唱衰,但是直到现在Java也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,所以我们为大家搜集了一些目前比较受欢迎的Java框架的消息. 根据RebelLabs对在 ...
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- Java框架spring 学习笔记(十四):注解aop操作
回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...
- Redis 分布式缓存 Java 框架
为什么要在 Java 分布式应用程序中使用缓存? 在提高应用程序速度和性能上,每一毫秒都很重要.根据谷歌的一项研究,假如一个网站在3秒钟或更短时间内没有加载成功,会有 53% 的手机用户会离开. 缓存 ...
随机推荐
- c# 委托访问listbox多线程操作
c# 委托访问listbox多线程操作 using System;using System.Collections.Generic;using System.ComponentModel;using ...
- C++ STL之Set
set是关联容器,类似于集合. 特点是里面的元素不会重复,而且元素时有序的. 1.声明定义: #include<set> using namespace std; set<int&g ...
- 从source安装python3.5和pip
按顺序来,先装上python3.5,source安装,命令是 ./configure --prefix="你想要的路径" make make install 然后是安装pip,但是 ...
- fopen\fread\fwrite\fseed函数的使用
使用 <stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为: FILE *fopen(char *filename, char *mode); filename为文 ...
- C++ GUI Qt4编程(11)-5.1hexSpinbox
1. hexspinbox.cpp /* * The spin box supports integer values but can be extended to use different str ...
- shell 操作环境
一.路径与命令查找顺序 命令的运行程序可以这样看: 1.以相对/绝对的路径执行命令,例“/bin/ls”或“ls” 2.由alias乍到该命令来执行 3.由bash内置的(builtin)命令来执行 ...
- VUE项目引入微信jssdk
npm i -S weixin-js-sdkimport wx from 'weixin-js-sdk'
- Android多语言与国际化
internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n.一般用 语言_地区的形式表示一种语言,如 zh_ ...
- unity3d发布到安卓平台
1.首先你得装上JDK并且配置好环境(就像学java配置环境一样) 百度jdk把下载安装成功 找到安装jdk目录的bin目录,复制路径,例如 C:\Program Files (x86)\Java\j ...
- 请以excel管理你的接口测试用例
闲话休扯,上需求:自动读取.执行excel里面的接口测试用例,测试完成后,返回错误结果并发送邮件通知. 分析: 1.设计excel表格2.读取excel表格3.拼接url,发送请求4.汇总错误结果.发 ...