首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助解决“确保文件路径中的用户控制变量被验证”的扫描问题。

需要帮助解决“确保文件路径中的用户控制变量被验证”的扫描问题。
EN

Stack Overflow用户
提问于 2022-09-26 09:37:59
回答 1查看 30关注 0票数 1

我有一个函数,我把文件名传递给它,假设文件名是‘abc-zyx-anony- pass v1.zip’格式,它可以包含特殊字符,如_或-

现在,当我们在它上运行semgrep扫描时,该扫描会显示一个错误,如

代码语言:javascript
复制
  javascript.lang.security.audit.detect-non-literal-fs-filename.detect-non-literal-fs-filename
        Detected function `artFacts` enter fs module. An attacker could  potentially control the
        location of this file, to include going  backwards in the directory with '../'. To address
        this,  ensure that user-controlled variables in file paths are validated.

为了解决这个问题,我阅读了几篇文章,并尝试了指定的方法来解决这个问题,我尝试的内容如下

1.试图删除./在路径之前添加,但没有运气,这不起作用

代码语言:javascript
复制
    public async artFacts(artfact:Artfact): Promise<Artfact> {
           const artfactName = artfact.getName();
           const getName = artfactName.replace(/^(\.\.(\/|\\|$))+/, '')

           fspromise.readFile(path.join(`${envConfig.artfacts_container_path}`,getName)){
               //some logic
           }
    
       }
代码语言:javascript
复制
 const artfactName = artfact.getName();
           const getName = artifactName.replace(/^(\.\.(\/|\\|$))+/, '')
           const realPath = await fspromise.realpath(path.join(`${envConfig.artfacts_container_path}`,getName));
           fspromise.readFile(path.join(`${envConfig.artfacts_container_path}`,realPath)){
               //some logic
           }
  1. 在上述方法中,尝试将路径规范化,但这种方法也没有任何进展。

请有人指导我如何解决这个扫描问题,谢谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2022-09-28 08:33:05

检测-非文字-fs-文件名 semgrep规则跟踪函数参数是否传递给fs文件处理函数,例如readFile。这确实是您的代码示例中的情况。

此规则没有指定任何杀菌剂,这将使semgrep认识到该值是安全的。因此,无论您如何操作artfactName,semgrep仍然会触发您的代码。在这种情况下,semgrep规则不够聪明,无法检测到您已经解决了问题。这个semgrep规则旨在指出您可能存在的漏洞,您应该自己查看它,以确定它是否仍然是一个问题。

代码语言:javascript
复制
artfactName.replace(/^(\.\.(\/|\\|$))+/, '')

这将移除行尾的../..\..。这不足以解决这个问题。考虑一下文件名....//somefile.txt发生了什么;../被删除了,结果是../somefile.txt

也许更好的方法是在检测../时抛出一个错误,或者在上一个/之后获取所有信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73852239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档