首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkPHP I 方法全解析:安全獲取輸入變量的統一入口

     編輯:PHP 相關知識

ThinkPHP I 方法(Input 縮寫)是統一、安全獲取輸入變量的核心入口,整合 $_GET/POST/REQUEST/SESSION/COOKIE/SERVER 等超全局變量,內建過濾機制,支援默認值、類型驗證、遞歸過濾。

調用格式

I('變量類型.變量名', ['默認值'], ['過濾方法'])

變量類型對照表

類型來源說明
get$_GETGET 參數
post$_POSTPOST 參數
param自動判斷GET/POST/PUT 智能獲取
request$_REQUEST合併 GET/POST/COOKIE
putPUT 輸入流RESTful API
session$_SESSIONSession 變量
cookie$_COOKIECookie 變量
server$_SERVER服務器變量
globals$GLOBALS全局變量

類型不區分大小寫,變量名嚴格區分大小寫。

基礎用法

echo I('get.id');           // $_GET['id']
echo I('get.name');         // $_GET['name']
echo I('post.email');       // $_POST['email']
echo I('session.user_id');  // $_SESSION['user_id']
echo I('cookie.');          // 整個 $_COOKIE 陣列
echo I('server.REQUEST_METHOD'); // $_SERVER['REQUEST_METHOD']

默認值支援

echo I('get.id', 0);        // 不存在返回 0
echo I('get.name', '');     // 不存在返回空字符串

過濾機制(核心亮點)

單次調用指定過濾

echo I('get.name', '', 'htmlspecialchars'); // 過濾後返回
echo I('post.email', '', 'strip_tags');     // 去除標籤

全局默認過濾 (DEFAULT_FILTER)

// 配置文件
'DEFAULT_FILTER' => 'htmlspecialchars'        // 默認
'DEFAULT_FILTER' => 'strip_tags,htmlspecialchars' // 多重過濾

// 效果
I('get.name'); // 等同 htmlspecialchars($_GET['name'])
I('get.name'); // 等同 htmlspecialchars(strip_tags($_GET['name']))

忽略全局過濾

I('get.name', '', NULL); // 不進行任何過濾

函數名過濾 vs filter_var 驗證

// 函數名:自動 array_map 處理陣列
I('post.ids', [], 'intval'); // 陣列每個元素 intval

// filter_var 驗證:返回 false 則用默認值
I('post.email', '', FILTER_VALIDATE_EMAIL);
I('post.url', '', FILTER_VALIDATE_URL);

// 字符標識簡寫(需 filter_list 支援)
I('post.email', '', 'email');
I('post.url', '', 'url');
I('post.age', '', 'int');

支持的驗證標識

int, boolean, float, validate_regexp, validate_url, validate_email,
validate_ip, string, stripped, encoded, special_chars, unsafe_raw,
email, url, number_int, number_float, magic_quotes, callback

param 類型特殊功能

智能請求類型判斷

I('param.id'); // GET 取 $_GET['id'],POST 取 $_POST['id']

URL 參數數字索引(PATHINFO 模式)

# URL: /News/2013/06/01
echo I('param.1'); // 2013
echo I('param.2'); // 06
echo I('param.3'); // 01

簡寫形式

I('id');      // 等同 I('param.id')
I('name');    // 等同 I('param.name')

全局遞歸過濾 (VAR_FILTERS)

// 配置
'VAR_FILTERS' => 'filter_default,filter_exp'

// filter_default 需引用參數
function filter_default(&$value) {
    $value = htmlspecialchars($value);
}

// filter_exp:防止 EXP 注入攻擊(框架內置)

最佳實踐建議

  1. 全項目統一使用 I 方法,禁用直接 $_GET/$_POST
  2. 配置 DEFAULT_FILTER => 'htmlspecialchars' 作為基線防護
  3. 關鍵業務字段顯式指定驗證:I('post.email', '', 'email')
  4. 文件上傳、大數據傳輸場景除外
  5. API 接口層統一參數獲取與驗證邏輯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved