【问题标题】:How to resolve Path Traversal vulnerability for the below code如何解决以下代码的路径遍历漏洞
【发布时间】:2022-02-16 12:15:06
【问题描述】:
const downloadFile = blobstoreRouter.get('/blobstore/download/:filename', (req, res) => {
var localFile = path.join(__dirname, '..', escape(req.params.filename));
var file = require('fs').createWriteStream(localFile);
try {
    s3.getObject({
        Bucket: process.env.BUCKET,
        Key: req.params.filename
    }).createReadStream().pipe(file);
    fs.readdir('src', (_err, files) => {
        files.forEach(file => {
            console.log(file);
            logger.info(file);
        });
    });
    res.setHeader('Strict-Transport-Security',
    'max-age=31536000; includeSubDomains');
    res.sendFile(file);
} catch (err) {
    logger.error('Error downloading the file ' + err);
    res.send('Failed');
}
});

Checkmarx 在该行给出警告 res.sendFile(文件);

我也为相同的内容添加了 HSTS 标头,但不确定这是否也有效。请指导我完成这两个。提前致谢

【问题讨论】:

    标签: javascript node.js express blobstore multer-s3


    【解决方案1】:

    添加 HSTS 或转义 req.params.filename 都不会缓解路径遍历漏洞。要了解什么是路径遍历,您可能想阅读以下博客文章:

    https://nodejs.org/en/knowledge/file-system/security/introduction/

    有很多方法可以解决这个安全问题,但 Checkmarx 认可使用清理方法,例如 replace()

    删除允许攻击者在您的 S3 存储桶的不同路径上遍历的潜在恶意字符:

    var localFile = path.join(__dirname, '..', escape(req.params.filename.replace(/^(\.\.(\/|\\|$))+/, '')));
    var file = require('fs').createWriteStream(localFile);
    try {
        s3.getObject({
            Bucket: process.env.BUCKET,
            Key: req.params.filename.replace(/^(\.\.(\/|\\|$))+/, '')
        }).createReadStream().pipe(file);
        fs.readdir('src', (_err, files) => {
            files.forEach(file => {
                console.log(file);
                logger.info(file);
            });
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多