MyBatis 防止 % _ sql 注入攻击 解决方法
来源:互联网 发布:网络段子分享 编辑:程序博客网 时间:2024/06/05 12:01
首先说思路,在mybatis中防止sql注入,目前只能在Controller层进行转义,后台sql进行查询,然后在controller层转义回来,返回到前台。
理论上应该可以在dao.xml中进行判断 但是目前还没写出来。Orz
上代码
@RequiresPermissions("member:member:view")@RequestMapping(value = {"list", ""})public String list(Member member, HttpServletRequest request, HttpServletResponse response, Model model) {/** -- 以下 防止sql%注入 故对其进行转化---- **/String companyName = member.getCompanyName();String loginName = member.getLoginName();if (companyName != null ) {if(companyName.contains("%")){member.setCompanyName(companyName.replaceAll("\\%", "\\\\%"));}if(companyName.contains("_")){member.setCompanyName(companyName.replaceAll("\\_", "\\\\_"));}}if (loginName != null) {if (loginName.contains("%")) {member.setLoginName(loginName.replaceAll("\\%", "\\\\%"));}if (loginName.contains("_")) {member.setLoginName(loginName.replaceAll("\\_", "\\\\_"));}}/** -- 转化完毕 -- **/Page<Member> page = memberService.findPage(new Page<Member>(request,response), member);/**-- 将转化的字符恢复原来的值 --**/if (companyName != null) {member.setCompanyName(companyName);}/**-- 将转化的字符恢复原来的值 --**/if (loginName != null) {member.setLoginName(loginName);}model.addAttribute("page", page);return "dsp/member/memberList";}
sql
<select id="findList" resultType="Member">SELECT <include refid="memberColumns"/>FROM dsp_member a<include refid="memberJoins"/><where>a.del_flag = #{DEL_FLAG_NORMAL}<if test="companyName != null and companyName != ''">AND a.company_name LIKE <if test="dbName == 'oracle'">'%'||#{companyName}||'%' ESCAPE '\'</if><if test="dbName == 'mssql'">'%'+#{companyName}+'%'</if><if test="dbName == 'mysql'">concat('%',#{companyName},'%')</if></if><if test="loginName != null and loginName != ''">AND a.login_name LIKE <if test="dbName == 'oracle'">'%'||#{loginName}||'%' ESCAPE '\'</if><if test="dbName == 'mssql'">'%'+#{loginName}+'%'</if><if test="dbName == 'mysql'">concat('%',#{loginName},'%')</if></if><if test="validStatus != null and validStatus != ''">AND a.valid_status = #{validStatus}</if></where><if test="sqlMap.confSql != null and sqlMap.confSql != ''">${sqlMap.confSql}</if><choose><when test="page !=null and page.orderBy != null and page.orderBy != ''">ORDER BY ${page.orderBy}</when><otherwise>ORDER BY a.update_date DESC</otherwise></choose></select>
sql这里主要是用 ESCAPE 进行转义
<if test="dbName == 'oracle'">'%'||#{companyName}||'%' ESCAPE '\'</if>
<if test="dbName == 'oracle'">'%'||#{loginName}||'%' ESCAPE '\'</if>
0 0
- MyBatis 防止 % _ sql 注入攻击 解决方法
- SQL注入防止攻击
- 防止sql注入攻击
- 防止SQL注入攻击
- 防止SQL注入攻击
- 防止SQL注入攻击
- 防止sql注入攻击
- 防止SQL注入攻击
- 防止SQL注入攻击
- 防止SQL注入攻击
- 持久层mybatis如何防止sql注入攻击
- mybatis SQL注入攻击
- mybatis防止sql注入
- mybatis防止sql注入
- mybatis防止sql注入
- mybatis防止sql注入
- MyBatis防止sql注入
- mybatis防止sql注入
- Netty维持长连接 消息推送及心跳机制
- Python中文处理-乱码解决
- android手把手教你开发launcher(三)
- python的dict,set,list,tuple应用详解
- Git 常用命令大全
- MyBatis 防止 % _ sql 注入攻击 解决方法
- 【The first】 题解:机器人搬重物
- 设计模式学习第七天
- 在32位、64位操作系统下各数据类型所占的字节数
- PyQt4--QThread实现界面与算法的分离--2
- hdu 1007(最近点对)
- Android MediaStore文件新建/删除/更新等注意
- DBConnection连接
- qt 官网下载各个版本的qt