1. 系统与PHP基础安全加固
sudo apt update && sudo apt upgrade
,确保Ubuntu系统和PHP及其扩展处于最新版本,及时修复已知安全漏洞。2. Web服务器配置优化
/etc/apache2/sites-available/000-default.conf
),添加<Directory>
指令限制目录访问权限,禁用目录列表(Options -Indexes
),并启用AllowOverride None
减少.htaccess文件的滥用风险。/etc/nginx/sites-available/default
)中,添加location ~ /\.ht { deny all; }
阻止访问.htaccess文件,配置fastcgi_pass
时使用Unix socket而非TCP端口,提升PHP-FPM通信安全性。3. PHP配置文件(php.ini)安全参数调整
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,eval
,禁止执行系统命令、Shell脚本等高风险操作,防止命令注入攻击。display_errors = Off
),开启错误日志记录(log_errors = On
),并指定日志路径(error_log = /var/log/php_errors.log
),避免将敏感信息(如数据库凭据、服务器路径)暴露给用户。file_uploads = On
(允许上传),upload_max_filesize = 2M
(单个文件最大2MB),post_max_size = 8M
(POST数据最大8MB),并通过代码验证上传文件类型(如仅允许图片格式),防止恶意文件上传。session.cookie_httponly = On
(禁止JavaScript访问Cookie)、session.cookie_secure = On
(仅通过HTTPS传输Cookie)、session.cookie_samesite = 'Strict'
(限制跨站请求携带Cookie),并定期调用session_regenerate_id(true)
重新生成会话ID,防止会话劫持。expose_php = Off
,隐藏HTTP响应头中的PHP版本信息,减少攻击者针对特定PHP版本漏洞的攻击机会。4. 安全模块部署
libapache2-mod-security2
模块(sudo apt install libapache2-mod-security2
),并启用它(sudo a2enmod security2
),通过配置规则集(如OWASP Core Rule Set)拦截SQL注入、XSS、CSRF等常见Web攻击。sudo apt install fail2ban
),配置jail.local
文件针对SSH、Apache、PHP-FPM等服务设置登录失败次数限制(如maxretry = 3
),自动封禁恶意IP地址。5. 输入验证与输出编码
filter_input
函数(如$input = filter_input(INPUT_GET, 'param', FILTER_SANITIZE_STRING)
)或filter_var
函数(如$email = filter_var($email, FILTER_VALIDATE_EMAIL)
)验证输入数据的合法性,拒绝非法字符。htmlspecialchars
(echo htmlspecialchars($output, ENT_QUOTES, 'UTF-8')
)或htmlentities
函数将特殊字符(如<
, >
, &
)转换为HTML实体,避免浏览器解析为HTML/JavaScript代码。6. 数据库安全防护
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $id);
),确保用户输入不会被解释为SQL代码。GRANT SELECT, INSERT, UPDATE ON yourdb.* TO 'youruser'@'localhost'
),避免使用root用户连接数据库。7. HTTPS加密与证书管理
sudo apt install certbot python3-certbot-nginx
),并通过certbot --nginx -d yourdomain.com
命令自动配置Apache/Nginx启用HTTPS,强制所有流量通过加密通道传输。Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
头,强制浏览器始终通过HTTPS访问网站,防止SSL剥离攻击。8. 日志监控与定期审计
/var/log/apache2/error.log
)、PHP错误日志(/var/log/php_errors.log
)和Fail2Ban日志(/var/log/fail2ban.log
),使用tail -f
命令实时监控异常活动(如大量404错误、登录失败)。9. 文件与目录权限管理
/var/www/html
)的所有者设为Web服务器用户(如www-data
),权限设为750
(所有者可读写执行,组用户可读执行,其他用户无权限);上传目录(如/var/www/html/uploads
)权限设为755
,并禁止执行权限(chmod -R 755 uploads
)。wp-config.php
、config.php
)、数据库凭证等敏感文件存放在Web根目录之外(如/var/www/config
),并通过.htaccess
文件(Apache)或location
指令(Nginx)禁止访问。