温馨提示×

ubuntu php如何防止注入

小樊
42
2026-10-07 07:25:59
栏目: 编程语言

在 Ubuntu 上运行 PHP 时,防止 SQL 注入(注入攻击) 主要依赖正确的编码方式和安全配置。下面按「最推荐 → 基础做法 → 服务器配置」讲清楚。


一、最推荐:使用预处理语句(PDO / MySQLi)

✅ 1. 使用 PDO(推荐)

$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 上默认支持


✅ 2. 使用 MySQLi 预处理

$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'";

三、辅助防护手段(不能替代预处理)

1. 输入校验

if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
    die('非法输入');
}

2. 输出转义(防 XSS)

echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');

3. 使用过滤器

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

四、Ubuntu 服务器层面加固

1. 关闭错误显示(生产环境)

; /etc/php/8.x/apache2/php.ini 或 fpm/php.ini
display_errors = Off
log_errors = On

2. 限制数据库用户权限

GRANT SELECT, INSERT ON db.* TO 'app'@'localhost';

3. 使用最新 PHP

sudo apt update
sudo apt install php php-mysql

五、总结(最重要三点)

✅ 永远用预处理(PDO / MySQLi)
✅ 不要拼 SQL
✅ 最小权限 + 关闭错误显示

如果你是:

  • Laravel / ThinkPHP
  • 命令行 PHP
  • 具体某个报错

可以告诉我,我给你更针对性的方案。

0 踩