我有一个图像库,并以下列方式渲染图像
<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
}
这是违反安全规定的行为吗?错误显示在返回文件的行。
有没有更好的方法可以解决这个问题?
我如何避免这种违规行为?
非常感谢任何建议
由于
答案 0 :(得分:0)
独立于“安全违规”通过查询字符串传递文件名不是一个好习惯。它可能允许文件包含攻击,允许攻击者查看应用程序的源代码或在Linux环境中泄露内部信息,如“etc / passwd”文件。
即使你对文件路径和类型进行硬编码,这也是可以绕过的保护措施。
有关“可能对文件名或路径进行外部控制”的详细信息,请查看:http://cwe.mitre.org/data/definitions/73.html
描述摘要 该软件允许用户输入来控制或影响文件系统操作中使用的路径或文件名。
扩展说明这可能允许攻击者访问或修改 系统文件或对应用程序至关重要的其他文件。路径 满足以下两个条件时会发生操作错误: 1.攻击者可以指定文件系统上的操作中使用的路径。 2.通过指定资源,攻击者获得了不允许的功能。例如,程序可能会给出 攻击者能够覆盖指定的文件或使用 由攻击者控制的配置。
关于您的安全违规,在哪个特定的上下文中被错误地抛出了?
答案 1 :(得分:0)
这个问题已经很老了,但是由于业力被认为可以解决,我想告诉你我是如何解决这个问题的。
我倾向于利用ESAPI api。 veracode扫描仪似乎正在寻找&#34;消毒&#34;被认为安全的价值观。在此处查看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 );
}
您可以查看doc以获取API的完整规范。
这种模式似乎适用于我遇到的大多数问题,不仅是CWE-73,还有其他问题。