CI mysql注入_CI框架中的SQL注入隐患



0x00

在CI框架中,获取get和post参数是使用了$this->input类中的get和post方法。

其中,如果get和post方法的第二个参数为true,则对输入的参数进行XSS过滤,注意只是XSS过滤,并不会对SQL注入进行有效的防范。

例子:

Controller中,定义一个shit方法,获取get数据:

55967fbc14c6e3229e44226f51ddc75d.png

指定了第二个参数为true:

(1)XSS测试

74a50e58458a2d009068334b6c989f17.png

(2)SQL注入测试

087d853a686ada580560c47e67556353.png

并不会对单引号进行处理。

例子在程式舞曲CMS中,该CMS是基于CI框架进行开发的CMS:

01b65442ee1a2205cc43141f96c3e7fe.png

这里的变量只有post的xss过滤,无法防范SQL注入。

使用了拼接的SQL语句,直接带入数据库查询:

7ac096f5cc2a9545471c6109f326b25d.png

edba15997a3fc7a253f062b19845cb11.png

0x01

在CI框架中,尽量使用AR类进行数据库查询是比较靠谱的,因为在底层会帮助使用者进行一次有效的转义,但也仅仅是转义而已。

过滤的方法是escape_str():

function escape_str($str, $like = FALSE)

{

var_dump($str);

echo "\n" ;

if (is_array($str))

{

foreach ($str as $key => $val)

{

$str[$key] = escape_str($val, $like);

}

return $str;

}

if (function_exists('mysql_real_escape_string'))

{

$str = addslashes($str);

}

elseif (function_exists('mysql_escape_string'))

{

$str = mysql_escape_string($str);

}

else

{

$str = addslashes($str);

}

// escape LIKE condition wildcards

if ($like === TRUE)

{

$str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);

}

return $str;

}

该方法仅仅是调用了一些转义函数,并对like参数进行过滤。

如果查询的变量没有被单引号包裹,那么就无法进行保护:

1d24cbdd262b7a845e4abffd3eef4942.png

0x02

AR类的过滤方案是没有考虑数组的key值的,纵观各大CMS出现的SQL注入,由于数组的$key过滤不严直接带入SQL查询的漏洞屡见不鲜。

05eaace008efe3323a0dc032d26227f5.png

输出为:

0c06e76b9abcf4bbe84801baebcdf4a9.png

0x03

CI框架开发速度快,轻巧,并且不用单独学习一门模板语言也可以使用。但是如果对CI框架中自带的安全机制理解不透彻,会导致无穷无尽的漏洞,程式舞曲CMS就是个很好的例子,被草了这么多回,代码还是这么烂,直接在controller里写SQL,说好的model呢。

原文:http://blog.csdn.net/u011721501/article/details/44787963

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值