ibatis中要增加一个排序功能
按照惯性思维增加了这样的代码
<isNotNull prepend="," property="orderColumn">
order by #orderColumn#
</isNotNull>
运行起来不符合预期
检查了生成了原始语句,发现组装成的SQL变成了
order by 'name'
在orderColumn参数前后加上了引号,所以会不成功。
如果改成 order by $orderColumn$ 的话,因为$符表示的是拼接字符串,所以就变成了order by name,这样执行是没有问题的,但是可能会形成sql注入漏洞,因为order by 后的传入参数可能为
orderColumn,(select if(substring(user(),1,2)='xx',sleep(4),-1)) 这个执行的效果为当数据库用户名为的前两位为xx时,挂起4秒(这个挂起是每条挂起4秒,也就是说如果有5条记录,那么会挂起20秒)。这样可能会被黑客攻击。
改进方法基本就两种,一种是在ibatis的xml中配置条件判断,比如参数为1时排序字段为A,为2时排序字段为B。
<isNotNull property="model.orderType" > <isEqual property="model.orderType" compareValue="0" prepend="ORDER BY" removeFirstPrepend="true"> BEGIN_TIME DESC </isEqual> <isEqual property="model.orderType" compareValue="1" prepend="ORDER BY" removeFirstPrepend="true"> APPLY_BEGIN_TIME DESC </isEqual> </isNotNull>
还一种就是在DAO层判断,判断传入的参数值,比如可以用正则表达式判断参数值是否为大小写字母+下划线。
相关推荐
iBatis解决SQL注入问题 iBatis是一个流行的持久层框架,广泛应用于Java企业级开发中。然而,在使用iBatis时,开发人员经常面临着SQL注入问题。SQL注入是一种常见的安全威胁,可能会导致数据泄露、数据篡改、系统...
方法一:利用google高级搜索,比如搜索url如.asp?... 您可能感兴趣的文章:Java面试题解析之判断以及防止SQL注入SQL注入原理与解决方法代码示例通过ibatis解决sql注入问题Win2003服务器防SQL注入神器–D盾_IIS防火墙
2. 需要手动管理SQL语句,可能会引发SQL注入问题。 3. 与ORM框架相比,iBATIS的功能相对较少,例如缺少实体类的自动映射。 总的来说,iBATIS SQL Maps为Java开发提供了一种有效的数据库访问方案,通过学习和掌握其...
iBATIS,作为一款优秀的持久层框架,提供了强大的动态SQL功能,解决了直接使用JDBC时编写复杂动态SQL的难题。本文将深入探讨iBATIS动态注入的相关知识点。 iBATIS动态SQL主要通过XML映射文件中的特定标签实现,允许...
7. **与Spring集成**:在实际项目中,iBATIS常与Spring框架一起使用,通过Spring的事务管理器和依赖注入,可以实现更高级别的应用架构。 8. **学习路径**:本教程可能包括iBATIS的安装与配置,SQL Maps的基本使用,...
在实际应用中,iBATIS SQL Maps常与其他Java框架(如Spring)集成,以实现更强大的功能,如AOP(面向切面编程)和依赖注入。同时,随着技术的发展,iBATIS已被MyBatis所取代,但其设计理念和核心思想在MyBatis中得以...
虽然iBATIS 自带了完整的数据访问能力,但常常与Spring框架一起使用,以利用Spring的依赖注入和AOP(面向切面编程)特性。通过Spring的DataSourceTransactionManager和SqlSessionFactoryBean,可以轻松地将iBATIS ...
**IBatis SQL Maps 入门教程** 在Java Web开发领域,数据访问层的实现往往是一个重要的环节。Ibatis,作为一个轻量级的持久层框架,为...进一步的学习和实践将帮助你更熟练地运用Ibatis解决实际开发中的数据访问问题。
3. **参数绑定**:在iBatis映射文件中,可以使用占位符绑定动态参数,实现SQL语句的参数化,提高安全性并防止SQL注入。 综上所述,这个项目演示了如何结合ASP.NET MVC、iBatis和SQL来构建一个简单的Web应用程序。...
例如,`select * from PRODUCT where PRD_CAT_ID = #{value}`中的`#{value}`是预编译参数,能有效防止SQL注入。 总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和...
其中`#value#`表示传入的实际参数值,通过这种方式实现了SQL语句的参数化,避免了SQL注入等安全问题。 ### 二、插入操作 接下来是第二条SQL语句: ```xml parameterClass=...
3. 配置SqlMapClient:在Spring等框架中配置iBATIS的SqlMapClient,注入到Service层。 4. 调用方法:在业务逻辑中,通过`UserMapper`接口调用`selectUserById`方法,传入用户ID,iBATIS会执行对应的SQL语句并返回...
在“iBATIS-SqlMaps中文教程集合”中,你将找到四本深入浅出的教程,这些教程涵盖了iBATIS的基础使用、高级特性和实战案例,帮助开发者快速掌握并熟练运用iBATIS解决项目中的实际问题。 1. **基础篇** - iBATIS...
SqlMap.xml文件则定义了具体的SQL查询和结果映射,它允许开发者编写灵活的SQL,同时避免了硬编码参数的问题。 在数据库操作方面,iBATIS提供了强大的映射机制,可以将SQL查询的结果自动转换为Java对象,反之亦然。...
在IT行业中,Ibatis是一个...然而,使用“##”时需谨慎,避免引发SQL注入等安全问题,因为它的原样输出特性可能会暴露敏感信息。在实际应用中,结合“#{}”和“##”的正确使用,可以极大地提升Ibatis的灵活性和实用性。
PreparedStatement支持预编译,提高性能并防止SQL注入;SimpleStatement则用于简单的SQL执行。 3. **ParameterMap**和**ParameterValuePair**:用于传递SQL查询参数。ParameterMap定义了参数和它们的映射关系,...
在ibatis demo中,我们可能还会看到如何配置Spring与Ibatis的集成,以便利用Spring的依赖注入和事务管理能力。这通常涉及`SqlSessionFactoryBean`的配置以及Mapper接口的扫描和装配。 通过这个demo,你可以了解到...
- **易出错**:手动拼接 SQL 容易引入 SQL 注入等安全问题。 - **性能开销**:频繁构建 SQL 语句可能导致性能下降。 ### 五、最佳实践建议 尽管手动拼接 SQL 字符串是一种简单有效的方法,但在实际项目中还应注意...
通过使用`#{}`占位符,Ibatis可以自动将参数值安全地注入到SQL语句中,避免SQL注入问题。 5. **结果映射**:Ibatis可以自动将查询结果映射到Java对象,也可以自定义映射规则,包括一对一、一对多、多对一等复杂关系...
SQL注入是一种常见的网络安全威胁,针对Web应用程序,尤其是那些依赖数据库存储和检索信息的系统。攻击者通过构造恶意的SQL查询,插入到用户输入字段中,从而控制或操纵数据库,获取敏感信息,甚至对数据进行修改。...