CI mysql注入_CI 防止sql注入和xss攻击

以下一些建议可供参考。

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增加了一层对数据类型的判断,看到了没(注意:它可没判断数值类型的哟,所以说如果传入的数据是数值型的话,你得自己动手判断一下了),下面这两个东东就是进行转义的家伙了。

functionescape($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;

}

functionescape_str($str,$like=FALSE)

{

if(is_array($str))

{

foreach($stras$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)之类的强制转换。

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值