日期:2014-05-17 浏览次数:20543 次
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
* @filesource
*/
// ------------------------------------
/**
* Input Class
*
* Pre-processes global input data for security
*
* @package CodeIgniter
* @subpackage Libraries
* @category Input
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/libraries/input.html
*/
class CI_Input {
/**
* IP address of the current user
* 当前用户的ip地址
* @var string
*/
var $ip_address = FALSE;
/**
* user agent (web browser) being used by the current user
* 当前用户(web浏览器)代理
* @var string
*/
var $user_agent = FALSE;
/**
* If FALSE, then $_GET will be set to an empty array
* 如果是FALSE , $_GET将被设置为空数组
* @var bool
*/
var $_allow_get_array = TRUE;
/**
* If TRUE, then newlines are standardized
* 如果为TRUR,新行将被标准化
*
* @var bool
*/
var $_standardize_newlines = TRUE;
/**
* Determines whether the XSS filter is always active when GET, POST or COOKIE data is encountered
* Set automatically based on config setting
* 决定是否总是在GET ,POST , COOKIE数据中进行XSS过滤
* 在配置选项里面配置是否自动开启
*
* @var bool
*/
var $_enable_xss = FALSE;
/**
* Enables a CSRF cookie token to be set.
* Set automatically based on config setting
* 允许CSRF cookie令牌
*
* @var bool
*/
var $_enable_csrf = FALSE;
/**
* List of all HTTP request headers
* HTTP请求头部的列表
* @var array
*/
protected $headers = array();
/**
* Constructor
* 设置是否全局允许XSS处理和是否允许使用$_GET数组
* Sets whether to globally enable the XSS processing
* and whether to allow the $_GET array
*
* @return void
*/
public function __construct()
{
log_message('debug', "Input Class Initialized");
// 从配置文件中获取是否进行全局允许使用$_GET XSS过滤和csrf保护
$this->_allow_get_array = (config_item('allow_get_array') === TRUE);
$this->_enable_xss = (config_item('global_xss_filtering') === TRUE);
$this->_enable_csrf = (config_item('csrf_protection') === TRUE);
// 清除globals变量,在开启了globals_register的情况下,相当于关闭了此配置。
// 开启一道 安全防护
global $SEC;
$this->security =& $SEC;
// Do we need the UTF-8 class?
if (UTF8_ENABLED === TRUE)
{
global $UNI;
$this->uni =& $UNI;
}
// Sanitize global arrays
$this->_sanitize_globals();
}
// --------------------------------
/**
* Fetch from array
* 从$array获取值,如果设置了xss_clean 那么进行过滤
* This is a helper function to retrieve 检索 values from global arrays
* 这是一个帮助函数用来从全局数组中检索
*
* @access private
* @param array
* @param string
* @param bool
* @return string
*/
function _fetch_from_array(&$array, $index = '', $xss_clean = FALSE)
{
if ( ! isset($array[$index]))
{
return FALSE;
}
if ($xss_clean === TRUE)
{
return $this->security->xss_clean($array[$index]);
}
return $array[$index];
}
// --------------------------------
/**
* Fetch an item from the GET array
* 获取过滤后的GET数组
* @access public
* @param string
* @param bool
* @return string
*/
function get($index = NULL, $xss_clean = FALSE)
{
// Check if a field has been provided
// 检查是否一个字段已经被提供
if ($index === NULL AND ! empty($_GET))
{
$get = array();
// loop through the full _GET array
// 遍历_GET数组
foreach (array_keys($_GET) as $key)
{
$get[$key] = $this->_fetch_from_array($_GET, $key, $xss_clean);
}
return $get;
}
return $this->_fetch_from_array($_GET, $index, $xss_clean);
}
// --------------------------------
/**
* Fetch an item from the POST array
* 获取过滤后的$_POST值
* @access public
* @param string
* @param bo