首页 > 其他分享 >CodeIgniter 的数据安全过滤全解析

CodeIgniter 的数据安全过滤全解析

时间:2023-03-23 12:00:48浏览次数:42  
标签:function string CodeIgniter mysql 转义 过滤 数据安全 str escape


由于对CI的SQL安全这些不放心,今天寡人啃了一下午的代码,算是对其机制比较了解了,为了让各位兄弟姐妹少走弯路,特将战果公布,希望大家喜欢。
1.无论如何在获取参数之时都建设将 xss过滤打开,比如 $this->input->get('username',true); 其中的true就代表打开了 xss
2.不要直接使用$_GET等类似方式获得数据,如果这样获取数据的话将不会被xss过滤
3.CI的数据在入库之前不仅不会增加转义字符,而且还会取消它 比如 Input.php 里面的这么一段



// We strip slashes if magic quotes is on to keep things consistent
if (get_magic_quotes_gpc())
{
$str = stripslashes($str);
}



4.如果你使用 $this->db->query('YOUR QUERY HERE'); 直接查询数据库,那么你需要使用 $this->db->escape('fileld_name') 语句进行转义,这样才安全。
escape函数实际上是调用的escape_str这个函数,只不过escape增加了一层对数据类型的判断,看到了没(注意:它可没判断数值类型的哟,所以说如果传入的数据是数值型的话,你得自己动手判断一下了),下面这两个东东就是进行转义的家伙了。



function escape($str)
{
if (is_string($str))
{
$str = "'".$this->escape_str($str)."'";
}
elseif (is_bool($str))
{
$str = ($str === FALSE) ? 0 : 1;
}
elseif (is_null($str))
{
$str = 'NULL';
}

return $str;
}

function escape_str($str, $like = FALSE)   
{   
if (is_array($str))
{
foreach($str as $key => $val)
{
$str[$key] = $this->escape_str($val, $like);
}

return $str;
}

if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id))
{
$str = mysql_real_escape_string($str, $this->conn_id);
}
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;
}



5.无论如何你都必须要对数值型数据手动判断,这个得你自己做,比如用个 (int)之类的强制转换。

6. 对于使用 Active Record 操作的数据你可以偷懒不用 $this->db->escape('fileld_name') 转义了(事实上你如果你使用了反而会被多增加些引号之类的东西),因为它会帮你搞定,但数值型你还是要自己判断。

7. 如果你使用 Active Record 操作的数据,那么其实CI是在数据快要入数据库的时候进行转义的,所以在前面的很多地方你都看不到addslashes之类函数的身影,这样做也是有好处的你看看escape_str函数里对转义函数的判断就知道了。

8.上面我一再强调数值型数据必须得自己搞定,实际上如果你的SQL语句中对数值型加了单引号的话,应该问题不大,不过还是建议处理一下。

标签:function,string,CodeIgniter,mysql,转义,过滤,数据安全,str,escape
From: https://blog.51cto.com/u_8895844/6144632

相关文章

  • 爬取的数据,存到mysql中、爬虫和下载中间件、加代理,cookie,header,加入selenium、去重规
    目录0爬取的数据,存到mysql中1爬虫和下载中间件2加代理,cookie,header,加入selenium2.1加代理2.2加cookie,修改请求头,随机生成UserAgent2.3集成selenium3去重规则源码......
  • 布隆过滤器
    本文已收录至Github,推荐阅读......
  • 你学会什么是布隆过滤器了吗?
    导读在对响应时间要求比较严格的情况下,如果我们有里面,那么随着集合中元素数量的增加,我们需要的存储空间越来越大,检索时间也越来越长,导致内存过多开销和时间效率变低。......
  • SQL—分组过滤group by函数与having函数
    题目:查看每个学校的平均发帖数(avg_question_cnt)和平均回帖数(avg_answer_cnt),并取出平均发帖数小于5的学校和平均回帖数小于20的学校。(保留3位小数)大佬的分解:1、限定条件......
  • Redis缓存穿透-布隆过滤器
    Redis缓存穿透-布隆过滤器缓存穿透我举个蘑菇博客中的案例来说,我现在有一个博客详情页,然后博客详情页中的内容假设是存储在Redis中的,然后通过博客的Uid进行获取,正常的情......
  • 过滤器
    过滤器filter<!DOCTYPEhtml><htmllang="en"><!--过滤器,是一个函数,定义到filters节点下,且一定要有return如果全局过滤器和私有过滤器名字一致,此时按照“**就......
  • ASP.NET MVC Filters 4种默认过滤器的使用
    过滤器(Filters)的出现使得我们可以在ASP.NETMVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功......
  • 理解ASP.NET Core - 过滤器(Filters)
    Filter概览如果你是从ASP.NET一路走过来的,那么你一定对过滤器(Filter)不陌生。当然,ASP.NETCore仍然继承了过滤器机制。过滤器运行在过滤器管道中,这是一张官方的图,很好地......
  • 前端设计模式——过滤器模式
    前端设计模式中的过滤器模式(FilterPattern)是一种结构型设计模式,它允许我们使用不同的条件来过滤一组对象,并返回符合条件的对象列表。在过滤器模式中,我们有一个包含多个对......
  • vue中全局过滤器
    //全局的过滤器,进行时间的格式化Vue.filter('dateFormat',function(dateStr){//根据给定的实际那字符串,得到绑定的时间vardt=newDate(dateStr)//yyy--mm--ddvar......