我有3种类型的文件(XML,PDF,zip)存储在服务器文件中,并根据请求(当客户端单击按钮时)以base64格式发送给用户(客户端)。
这些文件将下载到用户计算机,并且不会显示(在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)?
我如何验证漏洞的存在?
解决此安全问题的正确方法是什么?
答案 0 :(得分:0)
Checkmarx认为您未经任何验证即从源中获取任何内容。因此,数据不会因此受到污染,如果您将其发送给客户端,则可以转到XSS。
如果我们没有您的解释,就是这样。
@Cilian Collins的解释是正确的。这样,您可以将问题标记为“不可利用”,然后进行下一次扫描,这将不会显示给您。或者,如果您有更多时间,可以扩展Cx规则来完成:)
答案 1 :(得分:0)
您必须检查谁有权访问存储在文件系统中的文件。文件值得信赖吗?您如何阻止对这些文件的访问?可以修改它们(脚本注入)吗?默认情况下,不应将文件系统上的数据库或文件视为值得信任的数据源。返回给用户的所有数据都应进行验证。