0

我有一个图片库,并正在以下列方式呈现图像

<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
    }

这是安全违规吗?错误显示在返回文件的行。

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

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

任何建议都非常感谢

谢谢

4

2 回答 2

0

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

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

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

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

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

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

于 2013-12-05T14:47:06.210 回答
0

这个问题已经很老了,但由于业力应该会出现,我想向您展示我是如何解决这个问题的。

我倾向于利用 ESAPI api。验证码扫描器似乎在寻找被认为是安全的“已清理”值的分配。在此处查看 ESAPI 库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。虽然有实用方法,但我总是发现自己依赖于 getValidInput 方法,因为它的级别足够低,可以清理并且足够灵活,可以插入现有的功能。

这就是它的样子:

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

}

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

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

于 2015-06-10T15:31:58.723 回答