CWE-73: External Control of File Name or Path

解决Veracode的CWE-73:“外部控制文件名或路径”

我在我的应用程序中有一个函数,用于将生成的pdf文件流输出到磁盘文件,但我从Veracode的扫描中得到了一个缺陷[CWE-73],这会导致安全漏洞,攻击者可以访问文件系统上的任何文件,并读取文件甚至覆盖预期文件以外的文件。

try(FileOutputStream fos = new FileOutputStream(fileName)) {
    // write stream to fos
}catch (Exception e) {
    e.printStackTrace();
}

为解决此问题,参考verocode官网,使用了白名单(输入范围有限)以确保只提交众所周知的值。
https://www.veracode.com/security/java/cwe-73

但是问题仍然出现,公司Veracode网站有推荐使用ESAPI进行validate,但是我拒绝为此引入一个第三方组件。

然后使用下面java函数对文件名进行清洗(仅针对文件名,不包括文件后缀和路径),这在veracode中不再扫出安全漏洞。

public static String sanitizeFileName(String name) {

    return name
            .chars().mapToObj(i -> (char) i)
            .map(c -> Character.isWhitespace(c) ? '_' : c)
            .filter(c -> Character.isLetterOrDigit(c) || c == '-' || c == '_' || c == ':')
            .map(String::valueOf)
            .collect(Collectors.joining());

}
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值