本文目录导读:

我来详细说明如何为PHP项目配置ModSecurity。
安装ModSecurity
在Ubuntu/Debian上安装
# 安装依赖 sudo apt update sudo apt install -y libapache2-mod-security2 # 启用模块 sudo a2enmod security2 sudo systemctl restart apache2
在CentOS/RHEL上安装
# 安装EPEL仓库 sudo yum install epel-release sudo yum install -y mod_security # 对于Nginx用户 sudo yum install -y nginx-mod-security
基础配置
复制默认配置文件
# 复制推荐配置 sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf # 设置权限 sudo chmod 644 /etc/modsecurity/modsecurity.conf
主要配置项
# 在modsecurity.conf中设置 SecRuleEngine On # 启用规则引擎 SecRequestBodyAccess On # 允许检查请求体 SecResponseBodyAccess On # 允许检查响应体 SecAuditEngine RelevantOnly # 审计日志模式 SecAuditLog /var/log/modsec_audit.log # 审计日志路径
安装OWASP核心规则集(CRS)
# 下载OWASP CRS cd /usr/share/modsecurity-crs sudo git clone https://github.com/coreruleset/coreruleset.git # 复制配置文件 sudo cp crs-setup.conf.example crs-setup.conf # 在Apache配置中包含规则 sudo nano /etc/apache2/mods-available/security2.conf
Apache配置集成
# /etc/apache2/mods-available/security2.conf
<IfModule security2_module>
# 基础配置
Include /etc/modsecurity/modsecurity.conf
# 加载OWASP CRS
IncludeOptional /usr/share/modsecurity-crs/coreruleset/crs-setup.conf
IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/*.conf
</IfModule>
PHP项目特定配置
创建自定义规则文件
# 创建PHP项目规则文件 sudo nano /etc/modsecurity/rules/php_rules.conf
# PHP特定安全规则
# 阻止PHP文件上传
SecRule REQUEST_FILENAME "\.php$" "phase:2,id:1001,deny,msg:'阻止PHP文件上传'"
# 限制文件上传大小
SecRequestBodyLimit 10485760 # 10MB
SecRequestBodyNoFilesLimit 131072 # 128KB
# 防止PHP注入
SecRule ARGS "@rx (base64_encode|eval\(|system\(|exec\(|passthru\()" \
"id:1002,phase:2,deny,status:403,msg:'检测到潜在PHP注入'"
# 保护特定PHP文件
SecRule REQUEST_FILENAME "/wp-admin/" "id:1003,phase:1,deny,status:403,msg:'阻止后台访问'"
性能优化配置
# 性能优化设置 SecRuleEngine DetectionOnly # 仅检测不阻止(测试阶段) SecUnicodeMapFile /usr/share/modsecurity/unicode.mapping SecAuditLogParts ABIJDEFHZ # 减少日志内容 SecDefaultAction "phase:2,log,auditlog,pass" # 默认允许 # 排除静态文件检查 SecRule REQUEST_URI "\.(jpg|jpeg|png|gif|css|js)$" "phase:1,id:2001,t:lowercase,pass,nolog"
PHP项目白名单配置
# 为特定PHP路径设置白名单
<LocationMatch "/api/v1/">
SecRuleEngine Off
</LocationMatch>
# 或针对特定请求方法
SecRule REQUEST_METHOD "^(GET|HEAD)$" "phase:1,id:3001,t:lowercase,pass,nolog"
# 针对特定IP白名单
SecRule REMOTE_ADDR "@ipMatch 192.168.1.0/24" "phase:1,id:3002,pass,nolog"
监控和调试
查看ModSecurity日志
# 审计日志 sudo tail -f /var/log/modsec_audit.log # Apache错误日志 sudo tail -f /var/log/apache2/error.log # 调试模式(临时开启) SecDebugLog /var/log/modsec_debug.log SecDebugLogLevel 9
使用PHP测试规则
<?php
// 测试ModSecurity是否生效
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 测试SQL注入检测
$test_sql = "SELECT * FROM users WHERE id = 1 OR 1=1";
echo "SQL注入测试: " . $test_sql;
// 测试XSS检测
$test_xss = "<script>alert('XSS')</script>";
echo "XSS测试: " . $test_xss;
?>
配置文件示例
完整的PHP项目配置
# /etc/modsecurity/php_project.conf SecRuleEngine On SecRequestBodyAccess On SecResponseBodyAccess On # 基础安全规则 Include /usr/share/modsecurity-crs/coreruleset/crs-setup.conf Include /usr/share/modsecurity-crs/coreruleset/rules/*.conf # PHP自定义规则 Include /etc/modsecurity/rules/php_rules.conf # 性能优化 SecRequestBodyLimit 10485760 SecResponseBodyLimit 20971520 # 日志配置 SecAuditEngine RelevantOnly SecAuditLog /var/log/modsec_audit.log SecAuditLogType Serial SecAuditLogStorageDir /var/log/modsecurity/audit/
测试和验证
# 重启Apache
sudo systemctl restart apache2
# 测试规则是否生效
curl -X POST http://localhost/test.php -d "test=<script>alert('xss')</script>"
# 查看响应状态
curl -I http://localhost/test.php
# 检查ModSecurity状态
sudo apachectl -M | grep security
注意事项
- 测试环境先行:先在测试环境部署,确认无误后再上生产
- 渐进式启用:建议先使用
DetectionOnly模式 - 定期更新规则:保持OWASP CRS规则集更新
- 监控误报:定期检查日志,调整规则避免误拦截
- 备份配置:修改前备份原始配置
这样配置完成后,ModSecurity就能有效保护你的PHP项目免受常见的Web攻击了。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播