CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析

本文实例分析了CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患。分享给大家供大家参考,具体如下:

php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这种特殊字符又很容易给sql注入

在默认的config配置基础上加上:+=()特殊字符

#$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
$config['permitted_uri_chars'] ='a-z 0-9~%.:_\-\+=()';

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

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

ci 框架默认的过滤函数是escape :

xx". $this->db->escape ( $xxx )."xx

由于数组的$key过滤不严直接带入SQL查询的漏洞屡见不鲜:

$arr = array(
  'name'=>"2' and 1=2",
  "hello'"=>"2");
);

输出结果:

Array(
    [name] => 2\' and 1=2
    [hello' union select ] => 2
)

如果真实sql语句传入上面两个参数合并起来就可以查询出所有信息了,属于sql注入了

更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

(0)

相关推荐

  • CodeIgniter框架URL路由总结

    URI 路由 一般来说,URI字符串有着和它唯一对应的控制器(controller)类/方法.URI的各个部分是如下模式(pattern): 复制代码 代码如下: example.com/class/function/id/ 然而在一些例子中,你也许想重定向这种关系来调用一个不同的类/方法(class/function),而不是与URL一一对应(的调用). 例如,你可能想使你的URL采用这种原型(prototype): 复制代码 代码如下: example.com/product/1/ exam

  • 浅谈php(codeigniter)安全性注意事项

    1.httponly session一定要用httponly的否则可能被xxs攻击,利用js获取cookie的session_id. 要用框架的ci_session,更长的位数,httponly,这些默认都配好了. 不要用原生的phpsession,而要用ci_session.ci_session位数更长. 如果要用原生的session,应该这样设置(php.ini): session.sid_length //sid的长度,这里要加长,默认的太短了 session.cookie_httponl

  • CodeIgniter安全相关设置汇总

    CodeIgniter框架自身提供了一些安全设置如针对XSS和CSRF攻击的防范,针对SQL注入攻击的防范等. 就配置文件而言: 在application/config/config.php中 $config['encryption_key'] = '';//这个一定要设置 以加密自己的cookie等 $config['cookie_secure'] = TRUE;//设置为TRUE /* |----------------------------------------------------

  • CodeIgniter框架过滤HTML危险代码

    CodeIgniter过滤HTML危险代码的方法其实有好几种,其中最常见的有如下几种: 1.可以选择使用htmlspecialchars()方法过滤. 2.可以将config文件夹下面的config.php文件中的$config['global_xss_filtering'] = FALSE;设置为: 复制代码 代码如下: $config['global_xss_filtering'] = true; 但是这样设置后会加大服务器的开销的.所以看情况来设置. 3.可以在$this->input->

  • CodeIgniter删除和设置Cookie的方法

    本文实例讲述了CodeIgniter删除和设置Cookie的方法.分享给大家供大家参考.具体如下: $cookie = array( 'name' => 'loggedin', 'value' => 'yes', 'expire' => '86500', 'domain' => '.apol0829.dev', 'prefix' => 'apollidon_' ); set_cookie($cookie); $cookie = array( 'name' => 'log

  • Codeigniter实现处理用户登录验证后的URL跳转

    Codeigniter处理用户登录验证后URL跳转,主要涉及到了My_Controller.php页面以及登录验证模块User.php页面,具体代码如下: My_Controller.php页面: 复制代码 代码如下: class MY_Controller extends CI_Controller{    public function __construct()    {        parent::__construct();        /*判断是否登录,判断当前URL是否是aut

  • 解析如何去掉CodeIgniter URL中的index.php

    CI默认的rewrite url中是类似这样的,例如你的CI根目录是在/CodeIgniter/下,你的下面的二级url就类似这样http://localhost/CodeIgniter/index.php/welcome.不太好看,怎么把其中的index.php取掉呢?1. 打开apache的配置文件,conf/httpd.conf :LoadModule rewrite_module modules/mod_rewrite.so,把该行前的#去掉.搜索 AllowOverride None(

  • CodeIgniter针对lighttpd服务器URL重写的方法

    本文实例讲述了CodeIgniter针对lighttpd服务器URL重写的方法.分享给大家供大家参考.具体实现方法如下: 由于开发环境使用的是lighttpd服务器,我本机环境使用的是Apache配置,导致部署到开发机后,所有的链接地址全部跳转到首页. 分析了下,index.php/controller/function ,controller没有生效,应该是路由分发的缘故. 配置lighttpd配置的url重写规则: url.rewrite-once = ( "/(.*)\.(.*)"

  • CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析

    本文实例分析了CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患.分享给大家供大家参考,具体如下: php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这种特殊字符又很容易给sql注入 在默认的config配置基础上加上:+=()特殊字符 #$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; $config['permitted_uri

  • CI(CodeIgniter)框架中的增删改查操作

    CodeIgniter的数据函数类在 \system\database\DB_active_rec.php 复制代码 代码如下: <span style="font-size:16px;">class ModelName extends CI_Model {     function __construct()     {         parent::__construct();     } }</span> 连接数据库:$this->load->

  • 基于CI(CodeIgniter)框架实现购物车功能的方法

    本文实例讲述了基于CI(CodeIgniter)框架实现购物车功能的方法.分享给大家供大家参考,具体如下: 在商城项目中,购物车是非常重要的一环,此处留下源码,留作笔记!!! 话不多说,往下看: 1. 源代码 <?php defined('BASEPATH') OR exit('No direct script access allowed'); class cart extends Home_Controller { private $info = array(); #前台提交数据 priva

  • CI(CodeIgniter)框架视图中加载视图的方法

    本文实例讲述了CI(CodeIgniter)框架视图中加载视图的方法.分享给大家供大家参考,具体如下: CI做为php的一个轻量级框架,其自身具备很多优点,在此我重点想说的是视图中加载视图. 1:在Application\config\database.php文件中设置好CodeIgniter 数据库变量之后,紧接着在Application\config\config.php文件中设置基础 URL.例如我的基础 URL 是:http://localhost/codeigniter/ 2:接下来创

  • CI(CodeIgniter)框架实现图片上传的方法

    本文实例讲述了CodeIgniter框架实现图片上传的方法.分享给大家供大家参考,具体如下: 对于图片上传这种老生常谈的问题,在此我不得不再次重复一次,因为对于这框架毕竟有些地方值得自己学习与借鉴,这篇文章我是借助官方文档来写的,但有些地方任然需要标明一下. 下面我们来看看图片上传吧.首先在"./application/views/"文件夹下创一个视图文件:text.php,代码如下: <html> <head> <title>Upload Form

  • laravel框架中你所用到的依赖注入详解

    前言 用Laravel开发前前后后有2个月左右了,之前一直写Java,就像找到Java和PHP之前的共同点,用Java的某些原理去理解PHP会发现还是有很多共通之处的.Java的依赖注入已经是一个很常见的概念了,Spring框架主要就是解决了这一点,在PHP的laravel框架中,也出现了依赖注入的方式. 依赖注入就控制反转的一种是实现方式,面向对象的特征的重要体现,那么依赖注入中什么是依赖呢,这点用Java开发的人很多都能理解.笼统的说依赖就是一种联系,变量和实现的联系.有关于依赖注入的理解之

  • Spring框架中IoC容器与DI依赖注入教程

    目录 一.Spring 是什么 1.1 什么是容器 1.2 什么是 IoC 二.理解 IoC 2.1 传统程序开发的问题 2.2 分析 2.3 控制反转式程序开发 2.4 对比总结规律 2.5 理解 Spring IoC 三.DI 概念说明 四.总结 一.Spring 是什么 我们通常所说的 Spring 指的是 Spring Framework (Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因.Spring ⽀持⼴泛的应⽤场景,它可以让 Java

  • php中$_GET与$_POST过滤sql注入的方法

    本文实例讲述了php中$_GET与$_POST过滤sql注入的方法,分享给大家供大家参考.具体分析如下: 此函数只能过滤一些敏感的sql命令了,像id=1这种大家还是需要自己简单过滤了. 主要实现代码如下: 复制代码 代码如下: if (!get_magic_quotes_gpc()) { if (!empty($_GET)) { $_GET  = addslashes_deep($_GET); } if (!empty($_POST)) { $_POST = addslashes_deep($

  • Flask框架中request、请求钩子、上下文用法分析

    本文实例讲述了Flask框架中request.请求钩子.上下文用法.分享给大家供大家参考,具体如下: request 就是flask中代表当前请求的request对象: 常用的属性如下: 属性 说明 类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict args 记录请求中的查询参数 MultiDict cookies 记录请求中的cookie信息 Dict headers 记录请求中的报文头 EnvironHeaders method 记录请求

  • YII2框架中日志的配置与使用方法实例分析

    本文实例讲述了YII2框架中日志的配置与使用方法.分享给大家供大家参考,具体如下: YII2中给我们提供了非常方便的日志组件,只需要简单配置一下就可以使用. 我们在config/web.php中配置如下: return [ //log必须在bootstrap期间就被加载,便于及时调度日志消息到目标 'bootstrap' => ['log'], 'components' => [ 'log' => [ //消息跟踪级别,设置yii\log\Dispatcher::traceLevel属性

随机推荐