跨站脚本(XSS)攻击是Web应用程序常见的安全威胁之一。以下是在CentOS系统上配置防护措施的详细方案:
# 安装ModSecurity
sudo yum install mod_security mod_security_crs
# 启用OWASP核心规则集
sudo cp /usr/share/modsecurity-crs/modsecurity_crs_10_setup.conf.example /etc/httpd/modsecurity.d/modsecurity_crs_10_setup.conf
sudo cp -r /usr/share/modsecurity-crs/base_rules /etc/httpd/modsecurity.d/
编辑Apache/Nginx配置文件添加以下内容:
# 启用X-XSS-Protection
Header set X-XSS-Protection "1; mode=block"
# 启用Content Security Policy (CSP)
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://trusted.cdn.com;"
# 防止MIME类型嗅探
Header set X-Content-Type-Options "nosniff"
# 在/etc/httpd/conf/httpd.conf或虚拟主机配置中添加
<IfModule mod_headers.c>
# 防止点击劫持
Header always append X-Frame-Options SAMEORIGIN
# 启用HSTS
Header set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</IfModule>
# 在server块中添加
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://trusted.cdn.com";
# 在/etc/php.ini中设置
session.cookie_httponly = 1
session.cookie_secure = 1
expose_php = Off
default_charset = "UTF-8"
// 对所有输出进行HTML实体编码
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// 或使用现代PHP框架的内置方法
// Laravel: {{ $userInput }}
// Symfony: {{ userInput|escape }}
// PDO示例
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $email]);
# 配置自动安全更新
sudo yum install yum-cron
sudo systemctl enable yum-cron
sudo systemctl start yum-cron
# 编辑/etc/yum/yum-cron.conf设置
update_cmd = security
apply_updates = yes
# 安装并配置Fail2Ban
sudo yum install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 编辑/etc/fail2ban/jail.local添加Web应用防护
[nginx-xss]
enabled = true
filter = nginx-xss
logpath = /var/log/nginx/error.log
maxretry = 3
findtime = 3600
bantime = 86400
使用以下工具验证防护措施是否生效:
- OWASP ZAP
- Burp Suite
- XSS Hunter
- 手动测试:尝试注入简单XSS payload如<script>alert(1)</script>
通过以上综合措施,可以显著提高CentOS系统上Web应用程序对XSS攻击的防护能力。