# 安装file工具用于文件类型检测
sudo yum install file -y
# Nginx示例配置 (在server块中添加)
location ^~ /uploads/ {
# 禁止执行上传目录中的脚本
location ~ \.(php|pl|py|jsp|asp|sh|cgi)$ {
deny all;
return 403;
}
}
# Apache示例配置 (.htaccess)
<FilesMatch "\.(php|pl|py|jsp|asp|sh|cgi)$">
Order Deny,Allow
Deny from all
</FilesMatch>
sudo mkdir -p /var/www/uploads
sudo chown apache:apache /var/www/uploads # 根据实际Web用户调整
sudo chmod 750 /var/www/uploads
sudo chattr +i /var/www/uploads # 防止目录被篡改
sudo find /var/www/uploads -type f -exec chmod 640 {} \;
# 检查当前SELinux状态
sudo sestatus
# 如果禁用则启用SELinux
sudo sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config
sudo reboot
# 为上传目录设置SELinux上下文
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/uploads(/.*)?"
sudo restorecon -Rv /var/www/uploads
<?php
// 文件上传安全处理示例
$allowed_types = ['image/jpeg', 'image/png', 'application/pdf'];
$max_size = 1024 * 1024; // 1MB
$upload_dir = '/var/www/uploads/';
$filename = basename($_FILES['file']['name']);
$tmp_name = $_FILES['file']['tmp_name'];
// 验证文件类型
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($tmp_name);
if (!in_array($mime, $allowed_types)) {
die('不允许的文件类型');
}
// 验证文件大小
if ($_FILES['file']['size'] > $max_size) {
die('文件过大');
}
// 生成随机文件名
$extension = pathinfo($filename, PATHINFO_EXTENSION);
$new_filename = bin2hex(random_bytes(16)) . '.' . $extension;
// 移动文件
if (move_uploaded_file($tmp_name, $upload_dir . $new_filename)) {
echo '文件上传成功';
} else {
die('文件上传失败');
}
?>
sudo yum install clamav clamav-update -y
sudo freshclam # 更新病毒库
sudo systemctl enable clamav-freshclam
sudo systemctl start clamav-freshclam
# 设置定期扫描上传目录
echo "0 3 * * * root /usr/bin/clamscan -r -i /var/www/uploads" | sudo tee -a /etc/crontab
# 监控上传目录访问日志
sudo tail -f /var/log/nginx/access.log | grep "/uploads/"
sudo yum install mod_security -y
sudo cp /etc/httpd/conf.d/mod_security.conf /etc/httpd/conf.d/mod_security.conf.bak
sudo nano /etc/httpd/conf.d/mod_security.conf
添加以下规则:
SecRule FILES_TMPNAMES "@inspectFile /usr/share/modsecurity-crs/util/upload-file.pl" \
"phase:2,t:none,log,deny,msg:'Malicious file upload detected'"
# 安装ImageMagick用于图像文件验证
sudo yum install ImageMagick -y
# 发现可疑文件时的快速响应
sudo find /var/www/uploads -type f -mtime -1 -ls # 查找24小时内修改的文件
sudo chattr -i /var/www/uploads/suspicious_file # 移除不可变属性
sudo rm -f /var/www/uploads/suspicious_file
通过以上配置,您的CentOS系统将能够有效防护Web应用程序中的文件上传漏洞,确保上传功能的安全性。