【问题标题】:Security violation --External Control of File Name or Path possible安全违规——文件名或路径的外部控制可能
【发布时间】:2013-12-22 11:28:16
【问题描述】:

我有一个图片库并正在通过以下方式渲染图片

<a href="/Gallery/GetImage?Name=sample.jpg>Imagename</a> //user clicks hyperlink to download file

<img src=""/Gallery/GetImage?Name=sample.jpg"> //Displaying the image

我的 GetImage() 函数在下面,我将在其中获取图像并返回它。

    public ActionResult GetImage(string Name)
    {
        ..
        ...
        return File(FilePath, Type, Name); //Filepath - server folder where image located
                                            //Name is File name
    }

这是否违反安全规定。错误显示在返回文件的行。

有没有更好的方法可以处理这个问题?

我怎样才能避免这种违规行为?

非常感谢任何建议

谢谢

【问题讨论】:

  • 攻击者可能能够传入以.. 开头的文件名来导航文件系统并允许下载任意文件。您可以对文件名应用一些严格的过滤来防止这种情况发生。

标签: c# asp.net-mvc security veracode


【解决方案1】:

独立于“安全违规”通过查询字符串传递文件名不是一个好习惯。它可能允许文件包含攻击,允许攻击者查看您的应用程序的源代码或泄露内部信息,例如 Linux 环境中的“etc/passwd”文件。

即使您对文件路径和类型进行硬编码,这也是可能被绕过的保护措施。

有关“可以对文件名或路径进行外部控制”的更多信息,请查看:http://cwe.mitre.org/data/definitions/73.html

描述摘要 该软件允许用户输入来控制或影响文件系统操作中使用的路径或文件名。

扩展描述 这可能允许攻击者访问或修改 系统文件或其他对应用程序至关重要的文件。小路 满足以下两个条件时会发生操作错误: 1. 攻击者可以指定文件系统操作中使用的路径。 2. 通过指定资源,攻击者获得了原本不允许的能力。例如,程序可能会给出 攻击者能够覆盖指定文件或使用 攻击者控制的配置。

关于您的安全违规行为,该错误是在什么特定情况下引发的?

【讨论】:

    【解决方案2】:

    这个问题已经很老了,但既然业力应该会解决,我想告诉你我是如何解决这个问题的。

    我倾向于利用 ESAPI api。 veracode 扫描器似乎在寻找被认为是安全的“净化”值的分配。在https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCcQFjABahUKEwiCv-PvuIXGAhWNL4gKHYUBDmA&url=http%3A%2F%2Fcode.google.com%2Fp%2Fowasp-esapi-java%2Fdownloads%2Flist&ei=FFh4VYLlBo3foASFg7iABg&usg=AFQjCNGT7pjqMzlKl2yM1K_uM7GFwwYiDA&sig2=rK3zE8o2znde3bf66Q8Q_w 处查看 ESAPI 库。虽然有实用方法,但我总是发现自己依赖于 getValidInput 方法,因为它的级别足够低,可以清理并且足够灵活,可以插入现有的功能。

    这就是它的样子:

    public ActionResult GetImage(string Name) Throws 
    {
        ..
        ...
        string sanitizedInput = ESAPI.validator().getValidInput("FileName", Name, "FileName", true);
        return File(FilePath, Type, sanitizedInput ); 
    
    }
    

    您可以查看文档以获取 API 的完整规范。

    这种模式似乎适用于我遇到的大多数问题,不仅适用于 CWE-73,也适用于其他问题。

    【讨论】:

    • .NET ESAPI APi 的一个问题是它自 2010 年以来就没有被触及。
    猜你喜欢
    • 2014-09-04
    • 2018-11-23
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2016-03-06
    • 2015-03-26
    • 2014-05-03
    相关资源
    最近更新 更多