温馨提示×

Ubuntu MySQLSQL注入防范怎么做

小樊
53
2025-09-14 14:00:44
栏目: 云计算

在Ubuntu上防范MySQL SQL注入可从应用层、数据库层及系统层多维度入手,核心措施如下:

  • 应用层:使用预处理语句
    通过PDO或MySQLi扩展以参数化查询传递用户输入,避免SQL拼接。

    // PDO示例  
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');  
    $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');  
    $stmt->execute(['username' => $inputUsername]);  
    
    // MySQLi示例  
    $mysqli = new mysqli('localhost', 'user', 'password', 'test');  
    $stmt = $mysqli->prepare('SELECT * FROM users WHERE email = ?');  
    $stmt->bind_param('s', $inputEmail);  
    $stmt->execute();  
    
  • 应用层:输入验证与过滤
    对用户输入进行格式校验(如邮箱、手机号正则匹配),过滤特殊字符。

    // 正则验证邮箱  
    if (!preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $inputEmail)) {  
        die('非法邮箱格式');  
    }  
    
  • 数据库层:权限最小化
    为应用创建专用数据库用户,仅授予必要权限(如SELECTINSERT),禁止GRANT ALL

    CREATE USER 'app_user'@'localhost' IDENTIFIED BY '强密码';  
    GRANT SELECT, INSERT ON testdb.* TO 'app_user'@'localhost';  
    FLUSH PRIVILEGES;  
    
  • 数据库层:启用安全配置
    my.cnf中设置sql_mode=STRICT_ALL_TABLES,禁止不安全的SQL语法。

  • 系统层:部署Web应用防火墙(WAF)
    使用ModSecurity等工具拦截恶意SQL请求,可集成到Nginx/Apache中。

  • 审计与监控
    启用MySQL审计日志记录所有SQL操作,定期分析异常行为。

    -- 安装审计插件(需先下载)  
    INSTALL PLUGIN audit_log SONAME 'audit_log.so';  
    SET GLOBAL audit_log_policy = 'ALL';  
    
  • 系统层:定期更新与补丁管理
    通过apt-get updateapt-get upgrade保持MySQL及系统最新,修复已知漏洞。

关键优先级:预处理语句是防御SQL注入的核心技术,需在所有动态查询中强制使用;权限控制与WAF可作为辅助手段增强整体安全性。

0