码迷,mamicode.com
首页 > 数据库 > 详细

CI框架中的SQL注入隐患

时间:2015-04-01 00:28:13      阅读:410      评论:0      收藏:0      [点我收藏+]

标签:



0x00

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

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

例子:

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

技术分享

指定了第二个参数为true

(1)XSS测试

技术分享

2SQL注入测试

技术分享

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

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


技术分享

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

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

技术分享

技术分享

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参数进行过滤。

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

技术分享


0x02

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

技术分享

输出为:

技术分享

0x03

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


CI框架中的SQL注入隐患

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!