XML外部实体(XXE)攻击是一种常见的安全威胁,攻击者通过利用XML解析器的外部实体处理功能来读取服务器文件、发起SSRF攻击或执行其他恶意操作。以下是针对Linux服务器Web接口的XXE攻击防护方案:
# 在php.ini中设置
sudo sed -i 's/;libxml_disable_entity_loader = On/libxml_disable_entity_loader = On/' /etc/php/7.x/apache2/php.ini
// 设置DocumentBuilderFactory
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
# 在server块中添加
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
# 在httpd.conf或虚拟主机配置中添加
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'
考虑使用JSON等替代格式代替XML:
# 对于API服务,强制使用JSON
sudo sed -i 's/application\/xml/application\/json/' /etc/nginx/nginx.conf
# 定期更新系统组件
sudo apt update && sudo apt upgrade -y
# 或对于RHEL/CentOS
sudo yum update -y
配置详细的日志记录:
# 配置rsyslog记录XML处理错误
sudo echo "local0.* /var/log/xml_errors.log" >> /etc/rsyslog.conf
sudo systemctl restart rsyslog
# 安装ModSecurity for Apache
sudo apt install libapache2-mod-security2 -y
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
# 启用OWASP核心规则集
sudo git clone https://github.com/coreruleset/coreruleset /etc/modsecurity/crs/
sudo cp /etc/modsecurity/crs/crs-setup.conf.example /etc/modsecurity/crs/crs-setup.conf
通过以上措施的综合实施,可以显著降低Web接口遭受XXE攻击的风险。建议定期进行安全审计和渗透测试,确保防护措施持续有效。