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

PHP 八大安全函數深度解析:防注入、防 XSS 的利器

     編輯:PHP 相關知識

PHP 八大安全函數深度解析

在現代 Web 開發中,「永不信任用戶輸入」是鐵律。PHP 提供了多個內建函數協助開發者過濾、轉義輸入,防範 SQL 注入、XSS 跨站腳本等常見攻擊。雖然現代框架與 IDE(如 PhpStorm、Zend Studio)已提供語法高亮與靜態分析,甚至有代碼混淆工具(如 Zend Guard)保護邏輯,但理解這些函數的核心機制仍是寫出安全代碼的基石。本文逐一剖析 8 個關鍵安全函數的定義與工作原理。

1. mysql_real_escape_string() —— 過時的防注入衛士

該函數為特殊字符(單雙引號等)加上反斜槓,使輸入在 SQL 查詢中被視為字面值。注意:必須在已建立資料庫連線後調用。但自 PHP 5.5 棄用、PHP 7.0 移除,新專案應改用 PDO 預處理語句,從根本上杜絕注入風險。

2. addslashes() —— 需謹慎使用的轉義函數

功能類似上述函數,但若 php.ini 中 magic_quotes_gpc = On(舊版預設),GET/POST/COOKIE 數據已自動轉義,再次調用會導致雙重轉義。可用 get_magic_quotes_gpc() 檢測狀態。現代開發同樣建議棄用,改用參數綁定。

3. htmlentities() —— 全字符轉 HTML 實體

將所有可轉換的字符(如 < → &lt;)轉為 HTML 實體,有效阻斷 XSS 與部分注入嘗試。適用於需原樣顯示用戶輸入的場景。

4. htmlspecialchars() —— 核心特殊字符轉義

僅轉換 &、"、'、<、> 五個核心字符,性能優於 htmlentities()。輸出到 HTML 內容時的首選函數。

5. strip_tags() —— 剝離標籤

移除字符串中所有 HTML、JavaScript、PHP 標籤。第二個參數可指定允許保留的標籤(如 <b>、<i>),適合論壇、評論等需有限富文本的場景。

6. md5() —— 32 位不可逆雜湊

生成 32 字符十六進制摘要,常用於密碼存儲(僅作示例,實際生產請用 password_hash() + password_verify())。不可逆特性防止明文洩露。

7. sha1() —— 40 位 SHA-1 雜湊

原理同 md5(),輸出 40 字符。同樣不適合直接用於密碼存儲,現代應用應採用 bcrypt/Argon2 等慢速雜湊算法。

8. intval() —— 強制整數轉換

雖非安全專用函數,但將 id、age 等數值型輸入強制轉為 int,可有效阻斷注入 Payload(如 1 OR 1=1 變為 1)。是最輕量的「白名單」過濾手段。


最佳實踐總結:棄用 mysql_* 系列與 addslashes();輸出到 HTML 用 htmlspecialchars();資料庫操作全面採用 PDO 預處理;密碼存儲使用 password_hash();數值輸入用 intval() 或 (int) 強制類型轉換。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved