PHP在Linux上如何配置安全
小樊
33
2025-12-24 03:10:43
Linux上PHP安全配置清单
一 基础与最小化原则
- 保持系统与PHP版本为最新,及时修补已知漏洞;仅安装必要的扩展,减少攻击面。
- 以最小权限运行服务:Web与PHP-FPM使用非root专用用户(如www-data),并遵循最小权限原则配置目录与文件。
- 对输入进行严格校验与过滤,输出到页面时使用htmlspecialchars转义,启用**CSP(内容安全策略)**降低XSS风险。
- 对数据库访问使用PDO/MySQLi预处理语句防止SQL注入;避免在生产环境暴露调试信息。
二 php.ini关键安全指令
- 定位配置文件:在Web环境创建phpinfo.php,查看Loaded Configuration File;不同SAPI(Apache/Nginx+PHP-FPM/CLI)可能加载不同副本。修改后需重启对应服务。
- 建议生产环境关键指令如下(按实际需求微调):
- 错误与日志
- display_errors = Off
- log_errors = On
- error_log = /var/log/php_errors.log
- error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
- 信息泄露与攻击面
- expose_php = Off
- allow_url_fopen = Off
- allow_url_include = Off
- 危险函数与代码执行
- disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
- 文件系统访问
- open_basedir = /var/www/html:/tmp
- 会话与Cookie
- session.cookie_httponly = 1
- session.cookie_secure = 1(全站HTTPS时启用)
- 资源与性能(与安全相关)
- memory_limit = 128M(或按业务调高/调低)
- max_execution_time = 30
- opcache.enable=1(性能优化,建议生产开启)
- 说明:如应用确需远程包含/URL fopen,应改用更安全的库并在调用端做严格校验,而非全局放开。
三 Web服务器与PHP-FPM安全
- PHP-FPM(/etc/php/7.x/fpm/pool.d/www.conf)
- 使用非root运行:listen.owner = www-data;listen.group = www-data
- 套接字权限最小化:listen.mode = 0660
- Nginx示例(仅处理合法PHP,禁止访问敏感文件)
- 仅解析.php且限定路径:
- location ~ .php$ {
- include snippets/fastcgi-php.conf;
- fastcgi_pass unix:/var/run/php/php7.x-fpm.sock;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- 禁止访问版本控制与敏感文件:
- location ~ /.(ht|git|svn) { deny all; }
- 全站HTTPS与HSTS(示例)
- listen 443 ssl; ssl_certificate /path/to/cert.crt; ssl_certificate_key /path/to/key.key;
- add_header Strict-Transport-Security “max-age=63072000” always;
- Apache建议
- 禁用目录列表(Options -Indexes),限制.ht*访问,必要时使用mod_security增强WAF能力。
四 文件权限与隔离
- 目录与文件所有权
- Web根目录与上传目录归属www-data,权限755;上传目录禁止执行(如Nginx location ~* .php$ { deny all; })。
- 配置文件、密钥与备份移出Web可访问路径,或设置不可执行与访问控制。
- 访问控制增强
- 使用open_basedir限制脚本可访问目录(如项目根目录与/tmp)。
- 启用SELinux或AppArmor为PHP-FPM/Apache提供强制访问控制,降低提权与横向移动风险。
五 运行监控与维护
- 日志与告警
- 开启PHP错误日志与Web服务访问日志,集中采集并定期审计;对异常状态码、可疑UA、频繁404/403等进行告警。
- 更新与备份
- 定期执行系统与软件包更新(如apt/yum),并建立应用与数据库的定期备份与恢复演练流程。
- 安全测试与加固
- 使用OWASP ZAP/Burp Suite进行安全扫描;按需引入WAF/IPS;对外部命令执行采用白名单与严格校验。