温馨提示×

Ubuntu下PHP如何安全配置

小樊
53
2025-09-18 04:42:31
栏目: 编程语言

保持系统和PHP更新
定期更新Ubuntu系统和PHP及相关模块是安全配置的基础。运行以下命令更新系统包和PHP:

sudo apt update && sudo apt upgrade -y

确保使用最新的稳定版PHP(如PHP 8.2),避免已知漏洞被利用。

配置PHP核心安全参数(php.ini)
编辑php.ini文件(路径可通过php --ini查看,如/etc/php/8.2/apache2/php.ini/etc/php/8.2/fpm/php.ini),调整以下关键设置:

  • 关闭错误显示与开启日志:防止敏感信息(如数据库凭据、路径)泄露给用户,同时记录错误便于排查。
    display_errors = Off
    log_errors = On
    error_log = /var/log/php_errors.log
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT  # 报告所有错误,排除已弃用和严格模式警告
    
  • 禁用危险函数:阻止恶意代码执行系统命令、文件操作等。常见需禁用的函数包括:
    disable_functions = system, passthru, exec, shell_exec, proc_open, popen, phpinfo, eval, assert
    
  • 限制文件访问范围:通过open_basedir约束PHP脚本只能访问指定目录(如网站根目录),防止目录遍历攻击。
    open_basedir = /var/www/html:/tmp  # 多个目录用冒号分隔
    
  • 隐藏PHP版本信息:避免攻击者针对特定PHP版本漏洞发起攻击。
    expose_php = Off
    
  • 禁用远程文件操作:防止通过URL包含或打开远程文件(如include 'http://malicious-site.com/script.php';)。
    allow_url_fopen = Off
    allow_url_include = Off
    
  • 强化会话安全:设置会话Cookie的HttpOnly(防JS访问)、Secure(仅HTTPS传输)和SameSite(防CSRF)属性,定期重新生成会话ID。
    session.cookie_httponly = On
    session.cookie_secure = On  # 需配合HTTPS使用
    session.cookie_samesite = Strict
    session.gc_maxlifetime = 1440  # 会话有效期(分钟)
    session_regenerate_id(true);  # 在代码中调用(如登录后)
    

以上设置需根据应用需求调整,修改后重启Apache或PHP-FPM使生效。

使用安全模块增强防护

  • 启用mod_security(Web应用防火墙):拦截SQL注入、XSS、CSRF等常见攻击。安装并启用:
    sudo apt install libapache2-mod-security2
    sudo a2enmod security2
    sudo systemctl restart apache2
    
    配置规则文件(如/etc/modsecurity/modsecurity.conf),启用OWASP核心规则集(CRS)提升防护能力。
  • 安装Fail2Ban:防止暴力破解攻击(如SSH、WordPress登录)。安装并配置:
    sudo apt install fail2ban
    sudo cp /etc/fail2ban/jail.local /etc/fail2ban/jail.local.bak  # 备份默认配置
    sudo systemctl start fail2ban
    sudo systemctl enable fail2ban
    
    编辑jail.local,启用针对Apache或Nginx的暴力破解防护。

配置Web服务器安全

  • Apache安全配置:禁用不必要的模块(如php7.4-ftp),限制目录访问权限。编辑虚拟主机配置(如/etc/apache2/sites-available/000-default.conf):
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        php_admin_value open_basedir "/var/www/html:/tmp"  # 通过.htaccess或虚拟主机配置覆盖php.ini
    </Directory>
    
    禁用不需要的模块:
    sudo a2dismod php7.4-ftp  # 示例:禁用FTP模块
    sudo systemctl restart apache2
    
  • Nginx安全配置:处理PHP请求时使用FastCGI,限制访问敏感文件(如.htaccess)。编辑服务器块(如/etc/nginx/sites-available/default):
    server {
        listen 80 default_server;
        root /var/www/html;
        index index.php index.html;
        server_name _;
        location / {
            try_files $uri $uri/ =404;
        }
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        }
        location ~ /\.ht {
            deny all;  # 禁止访问.htaccess文件
        }
    }
    
    修改后重启Nginx:
    sudo systemctl restart nginx
    ```。  
    
    
    

加强文件和权限管理

  • 设置正确的文件权限:网站目录(如/var/www/html)的所有者和组设为Web服务器用户(通常为www-data),文件权限设为644(可读),目录权限设为755(可执行)。
    sudo chown -R www-data:www-data /var/www/html
    sudo find /var/www/html -type f -exec chmod 644 {} \;
    sudo find /var/www/html -type d -exec chmod 755 {} \;
    
  • 隔离上传目录:若应用允许文件上传,将上传目录设在网站根目录之外(如/var/uploads),并禁止PHP执行(通过Nginx/Apache配置)。例如,在Nginx中添加:
    location /var/uploads/ {
        deny all;
    }
    
    防止上传的恶意脚本被执行。

使用HTTPS加密通信
通过Let’s Encrypt获取免费SSL证书,配置Apache或Nginx启用HTTPS,强制所有流量通过HTTPS传输(防止中间人攻击)。以Certbot为例:

sudo apt install certbot python3-certbot-nginx  # Nginx
# 或 sudo apt install certbot python3-certbot-apache  # Apache
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com  # 替换为你的域名

Certbot会自动配置重定向HTTP到HTTPS,并续期证书。

定期监控与维护

  • 监控日志:定期检查Apache/Nginx的访问日志(/var/log/apache2/access.log/var/log/nginx/access.log)和错误日志(/var/log/apache2/error.log/var/log/php_errors.log),识别可疑活动(如大量404请求、异常POST请求)。
  • 备份数据:定期备份网站文件和数据库(如使用rsyncmysqldump),存储在安全位置(如异地云存储),以便在安全事件中快速恢复。

0