当前位置: 首页 > 后端技术 > Node.js

Web安全漏洞:文件上传

时间:2023-04-04 01:25:14 Node.js

文件上传漏洞及危害文件上传漏洞是指网络攻击者向服务器上传一个可执行文件。当开发者未能正确验证和处理文件时,很可能允许程序执行上传的文件,从而导致安全漏洞。大多数网站都有文件上传功能,比如头像、图片、视频等,如果这个逻辑处理不当,很容易触发服务器漏洞。这种漏洞在以文件名和URL为特征的程序中更为常见。嗯,没错,PHP,世界上最好的语言。比如用户上传一个PHP文件,拿到对应文件的地址后就可以执行,其中的危害不言而喻。那么Node.js不存在文件上传漏洞?答案肯定是否定的。除了可执行文件之外,还有如下几个潜在的问题。文件名用户上传的文件中有两个东西是程序经常用到的,一个是文件本身,一个是文件名。如果文件名用于读取或存储内容,请小心。攻击者很可能构造一个类似于../../../attack.jpg的文件名。如果程序不注意直接使用,很有可能覆盖服务器的密钥文件导致程序崩溃,更有可能直接用攻击者指定的密码覆盖/etc/passwd突破服务器。有的同学可能会说/这样的字符在文件名中是非法字符,用户不能定义这样的名字。你说的没错,但是我们要知道,我们并不是直接和用户的文件进行交互,而是通过HTTP请求来获取用户的文件。在HTTP表单上传请求中,文件名存储为字符串。只要是合法的HTTP请求格式,攻击者就可以构造请求中的任意内容提交给服务器。POST/uploadHTTP/1.1Host:test.comConnection:keep-aliveContent-Length:4237161Accept:*/*Origin:http://test.comUser-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10_14_5)AppleWebKit/537.36(KHTML,如Gecko)Chrome/75.0.3770.100Safari/537.36Content-Type:multipart/form-data;boundary=----WebKitFormBoundary9pQqgBGwpDfftP8lReferer:http://test.comAccept-Encoding:gzip,deflateAccept-Language:en,zh-CN;q=0.9,zh;q=0.8,zh-TW;q=0.7,da;q=0.6------WebKitFormBoundary9pQqgBGwpDfftP8lContent-Disposition:form-data;名称=“文件”;filename="../../attack.jpg"Content-Type:image/jpeg------WebKitFormBoundary9pQqgBGwpDfftP8l--HTML和SVG虽然Node.js可执行程序在文件上传服务器上的漏洞没有那么高和PHP一样,但是除了服务器端的可执行文件,我们还有客户端可执行文件的问题,所以我们还是要有所准备。假设用户可以上传任何格式的文件,如果攻击者上传的是HTML文件,就可以配合CSRF攻击进一步制造XSS攻击。如果你是一个上传图片的接口,只限制HTML格式也是有问题的,因为SVG格式有一种特殊的图片。SVG是一种矢量图形格式,它使用XML来描述图像,我们可以在其中插入DOM标签,如、