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