跨站脚本攻击也就是XSS攻击,是攻击者向Web页面注入恶意客户端脚本的攻击方式,注入的脚本会在用户浏览页面时执行,进而窃取用户会话信息、篡改页面内容或者跳转到恶意站点。在CentOS系统上运行Web应用时,除了在应用代码层面做输入过滤和输出转义之外,还可以通过系统层面的配置增强防护能力。

基础系统环境配置
首先要确保CentOS系统本身的安全补丁处于最新状态,及时修复已知的安全漏洞,减少攻击者利用系统漏洞绕过防护的可能性。
# 更新系统所有软件包 sudo yum update -y # 安装必要的系统安全工具 sudo yum install -y policycoreutils-python selinux-policy-devel
开启SELinux增强防护
SELinux是CentOS自带的安全增强模块,可以限制Web服务的权限,防止恶意脚本利用Web服务权限执行系统级操作。需要先将SELinux设置为强制模式。
# 查看当前SELinux状态 getenforce # 临时设置为强制模式,重启后失效 sudo setenforce 1 # 永久设置强制模式,需要修改配置文件 sudo sed -i 's/SELINUX=permissive/SELINUX=enforcing/g' /etc/selinux/config
Web服务层面的XSS防护配置
CentOS上常用的Web服务有Nginx和Apache,两者都可以通过配置添加安全响应头,从浏览器层面拦截部分XSS攻击。
Nginx配置方法
如果使用Nginx作为Web服务器,可以在站点配置文件中添加安全头配置,其中Content-Security-Policy头可以限制页面可以加载的资源来源,有效阻止恶意脚本的注入和执行。
server {
listen 80;
server_name example.ipipp.com;
root /var/www/html;
# 添加XSS防护相关响应头
# X-XSS-Protection 开启浏览器内置XSS过滤器
add_header X-XSS-Protection "1; mode=block";
# Content-Security-Policy 限制资源加载来源,禁止内联脚本执行
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;";
# X-Content-Type-Options 禁止浏览器猜测资源类型
add_header X-Content-Type-Options "nosniff";
location / {
index index.html index.php;
}
}
Apache配置方法
如果使用Apache作为Web服务器,可以通过修改httpd.conf或者站点配置文件添加对应的响应头。
<VirtualHost *:80>
ServerName example.ipipp.com
DocumentRoot /var/www/html
# 开启响应头模块
LoadModule headers_module modules/mod_headers.so
# 添加XSS防护响应头
Header set X-XSS-Protection "1; mode=block"
Header set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;"
Header set X-Content-Type-Options "nosniff"
</VirtualHost>
防火墙规则配置
通过CentOS自带的firewalld防火墙,可以限制不必要的端口访问,同时可以配合mod_security等模块实现请求过滤,拦截包含恶意脚本特征的请求。
基础防火墙配置
# 启动firewalld服务 sudo systemctl start firewalld # 设置开机自启 sudo systemctl enable firewalld # 开放HTTP和HTTPS服务端口 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https # 重新加载防火墙规则 sudo firewall-cmd --reload
安装配置ModSecurity
ModSecurity是开源的Web应用防火墙模块,支持Nginx和Apache,可以识别并拦截包含XSS攻击特征的请求。以下是Apache下安装配置ModSecurity的示例。
# 安装ModSecurity和相关依赖 sudo yum install -y mod_security mod_security_crs # 启动Apache服务 sudo systemctl start httpd # 启用ModSecurity模块 sudo systemctl restart httpd
安装完成后,ModSecurity会默认加载基础规则集,其中包含常见的XSS攻击特征检测规则,会自动拦截包含<script>、javascript:等恶意特征的请求。
其他防护补充措施
除了上述配置之外,还可以做以下补充配置增强防护效果:
- 定期备份Web应用数据和配置文件,避免攻击发生后数据无法恢复
- 限制Web服务进程的运行权限,不要使用root用户运行Web服务,减少攻击成功后的影响范围
- 开启系统日志和Web服务访问日志,定期审计日志,及时发现异常请求
通过以上CentOS系统层面的配置,结合Web应用代码层面的输入过滤和输出转义,可以构建多层的XSS防护体系,有效降低Web应用遭受跨站脚本攻击的风险。