Web 應用安全的第一鐵律:**所有非程式碼直接寫死的資料皆為「受汙染」**,必須經過清洗、驗證、轉義才能安全使用。
$_GET、$_POST、$_REQUEST、$_COOKIE、$_FILES、$_SERVER(部分)<?php
// 危險:直接使用 $_POST
$username = $_POST['username'];
$query = "SELECT * FROM users WHERE name = '$username'"; // SQL 注入
echo "Welcome $username"; // XSS
?>
filter_var($email, FILTER_VALIDATE_EMAIL)、ctype_alnum($username)、strlen($pwd) >= 8。htmlspecialchars($input, ENT_QUOTES, 'UTF-8')(輸出 HTML)、mysqli_real_escape_string()(SQL)、escapeshellarg()(Shell)。htmlspecialchars();HTML 屬性:同前;JavaScript:json_encode();URL:urlencode();Shell:escapeshellarg()。<?php
function cleanInput(string $input, int $maxLen = 64): string {
$clean = trim($input);
$clean = mb_substr($clean, 0, $maxLen, 'UTF-8');
// 僅保留字母數字底線(視業務調整)
$clean = preg_replace('/[^a-zA-Z0-9_]/u', '', $clean);
return strtolower($clean);
}
// 使用
$username = cleanInput($_POST['username'] ?? '');
?>
安全非一次性工作,需貫穿開發、測試、部署、維運全生命週期。建立「不信任」心態,是寫出安全程式的起點。