日期:2014-05-17 浏览次数:20457 次
<?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