ibatis like 用法,各数据库的安全拼接方法
2011-12-27 15:10
316 查看
原文地址:点击打开链接
iBatis解决sql注入
(1) ibatis xml配置:下面的写法只是简单的转义 namelike '%$name$%'
(2) 这时会导致sql注入问题,比如参数name传进一个单引号“'”,生成的sql语句会是:name
like '%'%'
(3) 解决方法是利用字符串连接的方式来构成sql语句 name
like '%'||'#name#'||'%'
(4) 这样参数都会经过预编译,就不会发生sql注入问题了。
(5) #与$区别:
#xxx# 代表xxx是属性值,map里面的key或者是你的pojo对象里面的属性,ibatis会自动在它的外面加上引号,表现在sql语句是这样的 where xxx = 'xxx' ;
$xxx$ 则是把xxx作为字符串拼接到你的sql语句中, 比如 order by topicId , 语句这样写 ... order by #xxx#,ibatis 就会把他翻译成 order by 'topicId' (这样就会报错) 语句这样写 ... order by $xxx$ibatis
就会把他翻译成 order by topicId
SELECT * FROM user WHERE username like '%$username$%' 的安全写法
Sql代码
SELECT * FROM user WHERE username like '%' || #username# || '%'
SELECT * FROM user WHERE username
like '%' || #username# || '%'
其实上面的语句是针对Oracle 的,对于不同数据字符串连接符不一样。现列举mysql和SQLServer如下:
[b]Mysql:[/b]
Sql代码
SELECT * FROM user WHERE username like CONCAT('%', #username#, '%')
SQLServer:
Sql代码
SELECT * FROM user WHERE username like '%' + #username# + '%'
-----------------------------------------------------------------------------------------------------------------------------
关于数据库字符串连接符简单列举我使用过的一些数据库如下:
iBatis解决sql注入
(1) ibatis xml配置:下面的写法只是简单的转义 namelike '%$name$%'
(2) 这时会导致sql注入问题,比如参数name传进一个单引号“'”,生成的sql语句会是:name
like '%'%'
(3) 解决方法是利用字符串连接的方式来构成sql语句 name
like '%'||'#name#'||'%'
(4) 这样参数都会经过预编译,就不会发生sql注入问题了。
(5) #与$区别:
#xxx# 代表xxx是属性值,map里面的key或者是你的pojo对象里面的属性,ibatis会自动在它的外面加上引号,表现在sql语句是这样的 where xxx = 'xxx' ;
$xxx$ 则是把xxx作为字符串拼接到你的sql语句中, 比如 order by topicId , 语句这样写 ... order by #xxx#,ibatis 就会把他翻译成 order by 'topicId' (这样就会报错) 语句这样写 ... order by $xxx$ibatis
就会把他翻译成 order by topicId
SELECT * FROM user WHERE username like '%$username$%' 的安全写法
Sql代码
SELECT * FROM user WHERE username like '%' || #username# || '%'
SELECT * FROM user WHERE username
like '%' || #username# || '%'
其实上面的语句是针对Oracle 的,对于不同数据字符串连接符不一样。现列举mysql和SQLServer如下:
[b]Mysql:[/b]
Sql代码
SELECT * FROM user WHERE username like CONCAT('%', #username#, '%')
SQLServer:
Sql代码
SELECT * FROM user WHERE username like '%' + #username# + '%'
-----------------------------------------------------------------------------------------------------------------------------
关于数据库字符串连接符简单列举我使用过的一些数据库如下:
Oracle | SQLServer | Mysql | DB2 |
|| 或 CONCAT() | + | CONCAT() | || 或 CONCAT() |
相关文章推荐
- ibatis like 用法,各数据库的安全拼接方法
- oracle-ibatis like 用法,各数据库的安全拼接方法
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- 数据库-SQL中like的用法
- 安全保护项目: 一种分阶段的数据库基础架构保护方法 (第三阶段)
- Android 中数据库查询方法 query() 中的 selectionArgs 的用法
- 数据库安全存储的方法概要
- 【连载】从安全攻击实例看数据库安全(二)安全攻击方法分析
- SQL防注入数据库安全设置方法!
- Android 中数据库查询方法 query() 中的 selectionArgs 的用法
- 数据库性能提高方法1--SET NOCOUNT的用法和注意事项
- 数据库安全:保证Oracle数据库安全性的策略和方法
- 获得数据库表名,表名检索,可用Like方法,
- 在ASP.NET(C#)中查询字符串Like拼接where字段的方法
- 安全保护项目: 一种分阶段的数据库基础架构保护方法 (第二阶段)
- 【引用】ibatis的#和$的区别、like、in的用法
- ibatis的#和$的区别、like、in的用法
- ibatis 数据库断开重连方法 jndi配置
- ibatis Dynamic总结(ibatis使用安全的拼接语句,动态查询)
- 从安全攻击实例看数据库安全(四)数据安全防护方法