客户端(前端):用 JavaScript 限制文件类型和大小,但不可依赖此层防护(用户可禁用 JS 或绕过前端校验)。
服务器端(核心):
白名单策略:仅允许明确需要的文件类型(如图片jpg/png/gif
、文档pdf/docx
),禁止php/asp/jsp/python
等脚本文件上传。
后缀名校验:严格匹配文件后缀(避免大小写混淆,如.PhP
),但需结合其他方式(攻击者可能修改后缀)。
MIME 类型校验:通过Content-Type
头部或服务器函数(如 PHP 的finfo_file()
)检查文件实际类型,防止伪造后缀(如.jpg
实为.php
)。
文件内容检测:通过 “魔数”(Magic Numbers)检查文件二进制头,例如图片文件开头的FF D8
(JPG)、89 50 4E 47
(PNG),..文件类型与后缀一致。
黑名单仅禁止已知危险类型,但攻击者可能用冷门后缀(如.phps
.phtml
)或自定义后缀绕过,因此必须用白名单。
路径固定且非 Web 根目录:将上传目录设置在 Web 根目录外(如/var/www/uploads/
,而非/var/www/html/uploads/
),避免直接通过 URL 访问脚本文件。
权限..小化:上传目录仅赋予读写权限
(如 Linux 下chmod 755
),禁止执行权限(防止脚本被执行),且 Web 服务器用户(如www-data
)仅拥有该目录的操作权限。
自动重命名文件:用 UUID、时间戳 + 随机数生成..文件名(如20250523_123456789.jpg
),避免使用用户提供的文件名,防止目录遍历(如../shell.php
)或覆盖系统文件。
路径拼接安全:代码中使用安全的路径拼接函数(如 PHP 的realpath()
+DIRECTORY_SEPARATOR
),避免手动拼接导致的路径错误。
禁止解析上传目录的脚本文件,在nginx.conf
中添加:
location /uploads/ { # 禁止执行PHP等脚本 location ~ \.(php|php5|phtml|asp|aspx|jsp|jspx)$ { deny all; return 403; } # 其他静态资源正常访问 access_log off; expires 7d;}
通过.htaccess
文件限制上传目录:
<Directory /var/www/uploads> Options -ExecCGI -Indexes <FilesMatch "\.(php|php5|phtml|asp|aspx|jsp|jspx)$"> Order allow,deny Deny from all </FilesMatch> </Directory>
禁用多后缀解析(如.php.jpg
被解析为 PHP),..httpd.conf
中AddHandler
未配置危险映射。
关闭WebDAV
功能(若无需使用),防止通过 PUT 方法上传文件;在 IIS 中设置 MIME 类型白名单,禁止脚本类型上传。
在 Web 服务器配置中设置..上传限制:
Nginx:client_max_body_size 10M;
(根据需求调整)。
PHP:修改php.ini
中的upload_max_filesize
和post_max_size
。
Apache:用LimitRequestBody 10485760
(10MB)。
防止大文件耗尽服务器资源或作为 DDoS 攻击手段。
上传后用杀毒引擎(如 ClamAV)扫描文件,或通过 YARA 规则检测恶意代码特征;对图片等资源可使用ImageMagick
重新渲染,破坏可能嵌入的恶意代码(如图片马)。
检查上传文件是否已存在,避免覆盖重要文件;禁止用户指定上传路径(如通过参数path=/
控制路径),路径由服务器端固定。
对 Web 框架(如 Drupal、WordPress)、CMS 及服务器软件(如 Nginx、Apache)及时更新,修复已知上传漏洞(如某些 CMS 的文件上传逻辑漏洞)。
定期审计上传功能代码,避免以下漏洞:
未校验文件类型直接存储;
路径拼接时未过滤用户输入中的/
等符号;
错误处理不当(如上传失败时返回详细路径信息)。
遵循安全开发原则:输入验证、输出编码、权限..小化。
记录所有上传操作(用户 IP、文件名、路径、时间),便于事后审计;通过日志分析异常行为(如短时间内大量上传脚本文件)。
配置 WAF(如 ModSecurity、OpenResty)或安全组件,实时拦截包含恶意特征的上传请求(如文件内容含eval
system
等关键词)。
定期用 OWASP ZAP、Nessus 等工具扫描上传功能,模拟攻击(如上传恶意文件、绕过校验);发现漏洞后立即修复,并备份服务器配置与数据。
权限分级:仅允许授权用户(如管理员、编辑者)使用上传功能,普通用户禁止上传;根据角色限制上传文件类型(如图片编辑仅允许上传图片)。
CSRF 防护:在上传表单中添加 Token,防止跨站请求伪造攻击导致恶意文件上传。
前端限制(辅助)+ 服务器端严格校验(核心);
文件类型白名单+路径权限控制+重命名机制;
Web 服务器解析漏洞修复+代码安全开发;
实时监控+漏洞扫描+应急响应。
通过以上措施,可有效降低上传漏洞被利用的风险,保护服务器安全。
(声明:本文来源于网络,仅供参考阅读,涉及侵权请联系我们删除、不代表任何立场以及观点。)