云南网站建设

中心
云南网站建设 云南网站推广 云南IT资讯 云南网赚联盟 云南服务器
欢迎您访问云南网站建设中心!
云南网站建设
您所在的位置:云南网站建设>云南网络安全>
热门关键词:

云南网站建设

云南网站推广

云南网站设计

、云南网络安全
云南网络安全之杜绝对象查询注射
来源: 作者: 发布时间:2007-12-07
杜绝对象查询注射
 
在越来越流行ORM技术~~~程序员把有关数据库的操作都交给持久层去处理,
也为了更方便所以框架也提供了另外对象查询语言例如HIBERNATE的HQL EJB的EJBQL等
这是好事吗?恩 的确很好~对于严谨的程序员来说!但是对于那些对技术一知半解的就不一定了!
或者对于那些偷懒的人来说更是糟糕的事情
以下我分别采用3大常用的持久层框架,加上代码的片段
 
Ibatis
 
<select id="unsafe" resultMap="myResultMap">
select * from table where name like '%$value$%'
</select>
 
UnSafeBean b = (UnSafeBean)sqlMap.queryForObject("value", request.getParameter("name"));
假设用户输入 kj021320
 
其翻译为本地SQL代码
select * from table where name like '%kj021320%'
而在ibatis 上面 $$ 之间的变量只是做了一般的替换 没有做SQL的转义这样往往就会存在攻击
 
需要把你的代码更正一下
<select id="safe" parameterClass="java.lang.String" resultMap="myResultMap">
select * from table where name like #value#
</select>
SafeBean b = (SafeBean)sqlMap.queryForObject("value", "%"+request.getParameter("name")+"%");
 
虽然有点麻烦 要在XML中说明一下你的参数的类型!但是这样就可以轻易的防止了对象查询的注射
 
Hibernate
 
这个框架用的人比较多了,继续看下面的代码示例
 
LoginUser lu = (LoginUser)session.find("from cn.isto.User as u where u.upass = '" + LoginUser.getUpass()+"' ");
这样很明显了~ 提交的pass可以随意更改HQL语句,达到绕过认证
下面让我们来加工一下修补修补
 
LoginUser lu = (LoginUser)session.find("from cn.isto.User as u where u.upass = ? " , LoginUser.getUpass() ,
 
Type );
 
Session 类下面find有3种方法具体查看相应的API,一定一定要采用参数追加的形式
以上只是简单的说明了一下 其实hibernate还有好多方式建立HSQL的 例如 createSQLQuery iterate 等都是值得注意的
 
到了最后老大牛 Enterprise Java Beans了
 
EJB
 
说到 EJB 其实有点太广了!一般没有用到 entity bean 的话可以忽略了,而SessionBean MessageDriverBean的安全不在这里
 
讨论~~~entity bean注射一般不会存在配置文件里面
看下面的
<query>
<query-method>
<method-name>findByMember</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<ejb-ql>
<![CDATA[SELECT OBJECT(h) FROM Member AS h WHERE h.name = ?1]]>
</ejb-ql>
</query>
 
一般参数都是 ? 形式,这个是规范!改不了!但是~ 在自己构造EJBQL查询的时候呢? 就有可能偷懒了 看下面的代码
 
StringBuffer ql =new StringBuffer(" SELECT OBJECT(h) FROM Member AS h ");
String order = request.getParameter("order");
if ( !=null )
ql.append(" order by id ").append( order );
Query query = em.createQuery(ql);
 
看到了 以上代码就存在着对象查询的注射
让我们来修补一下
private static final String[] ORDERS = {"asc","desc"};
if (Arrays.asList(ORDERS).contains(order)) {
ql.append(order);
} else{
ql.append("asc");
}
Query query = em.createQuery(ql);
 
总的一句话来说!不要让代码有太多的自由度,不要偷懒呵呵!
还有更多的持久层框架没有做安全隐患分析!例如 JDO pBeans 等 迟点补全!这是kj021320写的鸟鸟文~~
 
 
此文来自云南网站建设中心    网址:   www.0e0.com.cn
 
欢迎各位站长积极转载,让大家不再受这被黑之苦~~~!
 

云南网站建设中心热点文章
·云南网络安全-护公司数据安全的另类招
·云南网络安全-户端上网的流程和网站挂
·云南网络安全-到底是如何保障网络安全
·Web威胁日益严重 注意浏览网页的安全
·云南网络安全-为大家解释WEB安全
·云南网络安全-处理web安全领域的未知
·云南网络安全之服务器安全国标出台 自
·云南网络安全之窃取热血江湖的网游窃
·云南网络安全之今年的病毒发作情况看
·云南网络安全之谨防恶作剧程序和下载
云南网站建设中心相关文章
·能保护密码的U盘 功能存储市场新亮点
·磁碟机病毒
·云南网络安全-护公司数据安全的另类招
·云南网络安全-户端上网的流程和网站挂
·云南网络安全-到底是如何保障网络安全
·Web威胁日益严重 注意浏览网页的安全
·云南网络安全-为大家解释WEB安全
·云南网络安全-处理web安全领域的未知
·云南网络安全之服务器安全国标出台 自
·云南网络安全之窃取热血江湖的网游窃
云南网站建设中心文章检索
云南网站建设中心
云南网站建设相关文章
·能保护密码的U盘 功能存
·磁碟机病毒
·云南网络安全-护公司数
·云南网络安全-户端上网
·云南网络安全-到底是如
·Web威胁日益严重 注意浏
·云南网络安全-为大家解
·云南网络安全-处理web安
·云南网络安全之服务器安
·云南网络安全之窃取热血
·云南网络安全之今年的病
·云南网络安全之谨防恶作
·云南网络安全之年终谨防
·云南网络安全之警惕感染
·云南网络安全之微软发布
云南网站建设广告推广

云南网站建设中心为您提供专业的云南建站云南网站推广服务
站长QQ:82117802 3849851 联系电话:0871-6142471 联系人:曹小姐
版权所有 Powered By 云南网站建设中心