CI框架中的SQL注入隐患

来源:互联网 发布:android如何调用js方法 编辑:程序博客网 时间:2024/05/02 02:57


0x00

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

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

例子:

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

指定了第二个参数为true

(1)XSS测试

2SQL注入测试

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


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框架中自带的安全机制理解不透彻,会导致无穷无尽的漏洞


1 0
原创粉丝点击