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

打造高安全性 PHP 網站:五大核心防護實務

     編輯:PHP 綜合知識

前言

PHP 是最流行的 Web 開發語言,但也因廣泛使用而成為攻擊目標。本文整理五大實務防護技巧,助你在上線前建立纏深防禦體系。

技巧 1:啟用適當的錯誤回報

開發階段務必開啟完整錯誤回報,上線前關閉顯示但保留記錄:

<?php
// 開發環境
error_reporting(E_ALL);
ini_set('display_errors', '1');

// 正式環境
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');

錯誤日誌不僅是除錯工具,更能及早發現潛在安全漏洞(如 SQL 注入嘗試、路徑遍歷)。

技巧 2:關閉危險的 PHP 設定

以下設定在 PHP 5.4+ 已移除,舊版務必關閉:

  • register_globals = Off:防止查詢字串直接注入全域變數(如 ?access=1 繞過驗證)。
  • magic_quotes_gpc = Off:自動跳脫造成資料汙染,且易導致重複跳脫;應改用參數化查詢。
  • magic_quotes_runtime = Off
  • magic_quotes_sybase = Off

可在 php.ini 或 .htaccess 設定:

php_flag register_globals 0
php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0

技巧 3:嚴格驗證使用者輸入

  • 定義白名單:僅允許預期格式(如 Email、數字、列舉值)。
  • 使用 filter_var()、ctype_*、正則表達式驗證。
  • 前端驗證僅為體驗,後端驗證才是防線。

技巧 4:防範跨站腳本攻擊

輸出到 HTML 時務必編碼:

<?php
// 使用 htmlspecialchars,指定編碼與雙引號轉換
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
  • 若需允許部分 HTML,使用 HTML Purifier 白名單過濾。
  • 設定 HttpOnly 與 Secure Cookie 旗標,緩解 Cookie 竊取。

技巧 5:預防 SQL 注入攻擊

唯一正解:參數化查詢(Prepared Statements)

<?php
// PDO 範例
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->execute([':username' => $_GET['username']]);
$user = $stmt->fetch();

舊版 mysqli 亦支援:

$stmt = $mysqli->prepare('SELECT * FROM users WHERE username = ?');
$stmt->bind_param('s', $_GET['username']);
$stmt->execute();

切勿使用 mysqli_real_escape_string 拼接 SQL,參數化查詢從根本分離代碼與資料。

總結:深度防禦原則

單一防線終有失效時刻。結合:最小權限原則(資料庫帳號僅賦予必要權限)、輸入驗證、輸出編碼、參數化查詢、錯誤日誌監控、定期更新 PHP 與擴充套件,才能構建真正安全的 PHP 應用。

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