在 Ubuntu 上运行 PHP 时,防止 SQL 注入(注入攻击) 主要依赖正确的编码方式和安全配置。下面按「最推荐 → 基础做法 → 服务器配置」讲清楚。
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4';
$pdo = new PDO($dsn, 'user', 'pass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
✅ 自动防 SQL 注入
✅ 支持多种数据库
✅ Ubuntu 上默认支持
$conn = new mysqli('localhost', 'user', 'pass', 'test');
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param('s', $username);
$stmt->execute();
❌ 字符串拼接(极易被注入)
$sql = "SELECT * FROM users WHERE username = '$username'";
if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
die('非法输入');
}
echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
; /etc/php/8.x/apache2/php.ini 或 fpm/php.ini
display_errors = Off
log_errors = On
GRANT SELECT, INSERT ON db.* TO 'app'@'localhost';
sudo apt update
sudo apt install php php-mysql
✅ 永远用预处理(PDO / MySQLi)
✅ 不要拼 SQL
✅ 最小权限 + 关闭错误显示
如果你是:
可以告诉我,我给你更针对性的方案。