CentOS环境下PHP安全性保障方案
sudo yum update -y命令,保持CentOS系统及所有软件包(包括PHP、Web服务器、数据库)为最新版本,及时修补已知安全漏洞。firewalld精细控制网络访问,仅开放必要端口(HTTP的80端口、HTTPS的443端口),执行sudo firewall-cmd --permanent --zone=public --add-service=http、sudo firewall-cmd --permanent --zone=public --add-service=https及sudo firewall-cmd --reload命令生效。/etc/ssh/sshd_config文件中的Port指令,降低暴力破解风险。php -m命令查看已加载模块,禁用无用模块(如xdebug仅在开发环境使用);在/etc/php.ini中配置disable_functions指令,禁用eval、exec、passthru、shell_exec、system等危险函数,防止命令注入。expose_php = Off(禁用PHP版本信息泄露)、display_errors = Off(生产环境关闭详细错误显示)、log_errors = On(将错误日志记录到/var/log/php_errors.log),避免向攻击者暴露系统细节。open_basedir指令限制PHP脚本只能访问指定目录(如/var/www/html/:/tmp/),防止恶意脚本遍历系统文件;配置allow_url_fopen = Off、allow_url_include = Off,禁止远程文件包含和打开,降低远程代码执行风险。session.cookie_httponly = On(防止JavaScript通过document.cookie获取会话ID)、session.cookie_secure = On(仅通过HTTPS传输会话Cookie)、session.cookie_samesite = Strict(防止CSRF攻击),并配置session.gc_maxlifetime = 1440(会话有效期15分钟)。/etc/httpd/conf/httpd.conf或虚拟主机配置),设置Options -Indexes(禁止目录遍历)、AllowOverride None(禁用.htaccess覆盖,除非必要)、Require all granted(精确控制访问权限);隐藏Apache版本信息(ServerTokens Prod、ServerSignature Off)。/etc/nginx/nginx.conf或虚拟主机配置)中,设置location ~ \.php$块,使用fastcgi_pass指向PHP-FPM socket(如unix:/run/php-fpm/www.sock),并通过fastcgi_param SCRIPT_FILENAME确保脚本路径正确;禁用autoindex模块(禁止目录列表)。prepare方法:$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username'); $stmt->execute(['username' => $username]);。SELECT、INSERT、UPDATE、DELETE等必要权限,避免使用root账户连接数据库。mod_security模块增强PHP应用防护,拦截SQL注入、XSS、CSRF等常见攻击。执行sudo yum install mod_security安装,配置规则集(如OWASP Core Rule Set),并启动服务(sudo systemctl enable mod_security && sudo systemctl start mod_security)。/etc/php.ini中开启OPcache(opcache.enable = 1),缓存预编译脚本,提高性能的同时减少源代码暴露风险;配置opcache.memory_consumption = 128(内存占用128MB)、opcache.max_accelerated_files = 4000(最大加速文件数)。/var/www/html)权限为755(所有者可读、写、执行,组和其他用户可读、执行),文件权限为644(所有者可读、写,组和其他用户可读);将所有权归属给Web服务器用户(如apache或nginx),执行sudo chown -R apache:apache /var/www/html、sudo chmod -R 755 /var/www/html。upload_max_filesize = 2M、post_max_size = 8M),仅允许上传图片、文档等安全格式(通过accept属性前端验证+后端MIME类型检查);将上传目录存放在Web根目录之外(如/var/uploads),避免直接执行上传的脚本。fail2ban工具监控日志(如/var/log/secure、/var/log/php_errors.log),自动封禁多次登录失败的IP地址;定期检查系统日志(journalctl -xe)和Web服务器日志,识别异常访问(如大量404错误、可疑POST请求)。rsync或tar命令备份到异地(如/backup目录),并压缩归档(gzip website_backup.tar);测试备份文件的恢复流程,确保灾难发生时可快速还原。filter_var($email, FILTER_VALIDATE_EMAIL)、手机号用正则表达式),过滤特殊字符(如htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'));对输出到页面的内容进行编码,防止XSS攻击。password_hash()函数(算法设为PASSWORD_BCRYPT)对用户密码进行哈希存储,避免明文保存;配置password_verify()函数验证密码,定期提示用户更换密码(如每90天)。