我有3种类型的文件(XML、PDF、zip)存储在我的服务器文件中,并根据请求以base64格式发送给用户(客户端)(当客户端单击一个按钮时)。< br >文件被下载到用户的计算机上,并且不显示(在HTML页面上)。
我使用Checkmarx服务进行了安全测试,收到了安全问题:
“MyFile.js第58行的方法函数从数据库中为readFileSync元素获取数据。然后,该元素的值在未经正确筛选或编码的情况下流经代码,并最终显示给MyFile.js第58行方法函数中的用户。这可能会启用存储跨站点脚本攻击(XSS)。”。
我服务器端的代码是:
var fs = require('fs');
downloadFile: function (req, res) {
var params = req.allParams();
var contents = fs.readFileSync(FilePathInTheProject).toString('base64');
res.send(contents);
},
我不明白无法从客户端访问的服务器存储文件如何启用存储跨站点脚本攻击(XSS)?
如何验证漏洞的存在?
解决这个安全问题的正确方法是什么?
Checkmarx认为您从来源获取任何内容都没有经过任何验证。因此,数据不会因此而受到污染,如果您将其发送给客户端,则可能会发送到XSS。
如果我们的观点没有您的解释,这是正确的。
@Cilian柯林斯的解释是正确的。这样,您就可以将问题标记为“不可利用”,下次扫描时,这不会显示给您。或者,如果您有更多的时间,则可以扩展 Cx 规则以执行该操作:)
您必须检查谁有权访问存储在文件系统上的文件。这些文件值得信赖吗?您是如何阻止对这些文件的访问的?它们可以被修改吗(脚本注入)?默认情况下,文件系统上的数据库或文件不应被视为值得信赖的数据源。返回给用户的所有数据都应经过验证。