1. 系统与PHP基础安全加固
保持系统和PHP版本最新,及时修复已知漏洞(如通过sudo apt update && sudo apt upgrade更新Ubuntu系统和PHP)。使用非root用户(如www)运行Web服务器(Apache/Nginx)和PHP-FPM,限制进程权限,避免漏洞扩散至系统核心。
2. PHP配置文件关键参数优化
php.ini中设置disable_functions = passthru,exec,system,chroot,shell_exec,proc_open,禁止执行系统命令;禁用不必要的模块(如mysqli若无需MySQL),减少攻击面。expose_php = Off,移除响应头中的X-Powered-By: PHP标识,避免泄露PHP版本;设置display_errors = Off,将错误信息记录到/var/log/php_errors.log(log_errors = On),防止敏感信息(如数据库路径、代码逻辑)泄露。open_basedir = /var/www/html:/tmp(多目录用冒号分隔),限制PHP脚本仅能访问指定目录,防止通过file_get_contents()等函数读取系统敏感文件(如/etc/passwd)。allow_url_include = Off,禁止通过include/require引入远程URL文件(如http://evil.com/malicious.php),防止远程代码执行;同时设置allow_url_fopen = Off,限制远程文件打开功能。3. Web服务器层安全配置
location ~* ^/(attachments|data)/.*\.(php|php5)$ {
deny all;
}
Apache在上传目录的.htaccess中添加:php_flag engine off,防止上传的恶意PHP文件被执行。sudo certbot --apache -d yourdomain.com),强制全站HTTPS,防止数据(如密码、会话ID)在传输过程中被窃取。php.ini中设置post_max_size = 8M、upload_max_filesize = 2M,限制上传文件大小,防止大文件上传导致服务器资源耗尽。4. 会话与身份认证安全
session.cookie_httponly = 1,禁止JavaScript访问会话Cookie(防止XSS窃取会话);设置session.cookie_secure = 1(全站HTTPS时开启),确保会话Cookie仅通过安全连接传输;设置session.gc_maxlifetime = 3600(1小时),定期清理过期会话。password_hash()函数(如$hashed = password_hash($password, PASSWORD_DEFAULT))存储用户密码,该函数自动处理盐值和哈希算法(如bcrypt),避免明文存储或弱哈希(如MD5)。5. 输入验证与输出编码
filter_var()函数验证输入格式(如邮箱:filter_var($email, FILTER_VALIDATE_EMAIL)),拒绝非法字符;对输出到页面的内容使用htmlspecialchars()函数(如echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8')),防止XSS攻击(将<script>转为<script>)。$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(':username', $username);
$stmt->execute();
防止恶意输入(如' or '1'='1)篡改SQL逻辑。6. 监控与维护
grep -r --include=*.php '[^a-z]eval($_POST' /var/www/html查找可疑代码(如eval函数),使用find -mtime -2 -type f -name "*.php"检查最近修改的PHP文件(防止木马植入);通过OWASP ZAP或Burp Suite扫描应用漏洞(如SQL注入、XSS)。/var/log/php_errors.log、Web服务器日志(如/var/log/apache2/error.log),监控异常访问(如大量404请求、可疑POST请求);使用rsync或mysqldump定期备份网站文件和数据库(如mysqldump -u root -p dbname > backup.sql),确保数据可恢复。