gpt4 book ai didi

asp.net-mvc - 上传图片 - 安全

转载 作者:行者123 更新时间:2023-12-04 02:47:19 24 4
gpt4 key购买 nike

设置:

我正在为电子学习包编写管理实用程序。使用此实用程序,导师可以编写类(class)、添加/上传图像等。

我的问题是上传文件时的安全漏洞,特别是图像文件。

以下代码是我用于上传新图像文件的 POST 的 Controller 代码:

[HttpPost]
public virtual ActionResult StepImage(int CourseId, int StepOrder, HttpPostedFileBase file)
{
service.CourseId = CourseId;
service.StepOrder = StepOrder;
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var fileExtension = Path.GetExtension(fileName);
if ((fileExtension == ".jpg") || (fileExtension == ".gif") || (fileExtension == ".png"))
{
service.StoreImageFileName(fileName);
var path = Server.MapPath("~/[path to where images are uploaded]/" + service.CourseId + "/");
if(!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
file.SaveAs(path + fileName);
}
else
{
// Refactor notice : Validation for invalid file extension
}
}
else
{
// Refactor notice : Validation for no file chosen
}

return RedirectToAction(MVC.Admin.StepEditor.Actions.Edit(CourseId, StepOrder));
}

从上面的代码可以看出,我检查了文件扩展名,并且只允许 .jpg、.gif 和 .png。

问题
  • 我尝试将文件存储在 App_Data 文件夹下,但是当 View 尝试显示图像时,这导致了 403 禁止响应。
  • 所以我把它们放在 ~/Images/...

  • 这有安全风险吗?有人可以上传带有 .jpg 扩展名的 .exe 文件并让它执行 baddie 代码吗?

    不得不说风险很低,因为只有导师才有权限使用上传文件的页面,但你只需要一个心怀不满的导师......或者他们将他们的登录详细信息提供给学生......或其他任何东西.
  • 该代码中还有其他安全风险吗?

  • PS:

    基础知识取自 Scott Hanselman 和 Phil Haack 关于使用 ASP.NET MVC 2 + 上传文件主题的博客文章:

    Phil Haack post

    Scott Hanselman post

    最佳答案

    将图像放入 App_Data 文件夹时会收到 403 响应,因为 IIS 阻止任何浏览器直接访问 App_Data 中的文件。

    将它们放在 ~/Images/中有效,但取决于该文件夹的安全性,这可能意味着任何人都可以列出 ~/Images/的内容和/或查看图像。默认情况下,IIS 禁止列出任何文件夹的内容,但允许任何人查看图像。所以,如果有人知道图像的文件名,他们可以查看它们。

    一个解决方案是使用 URL based authentication .只有导师(或任何需要的人)才能看到图像。

    如果您想完全控制谁在什么页面上看到什么,您仍然可以将图像放在 App_Data 文件夹中,然后将它们流式传输给需要它们的人或任何需要它们的人 like this .

    关于将 .exe 上传为 jpg,这当然是可能的。它甚至适用于任何类型的文件。

    但是,您将文件保存到磁盘上,并且您自己不要对其进行任何操作。这使得在您的服务器上执行 .exe-as-jpg 的风险非常小。除非有人在 .net 代码中发现强制 .net 执行 jpg 的漏洞,否则这是不太可能的。

    您还可以在 View 中向用户显示 jpg。这再次带来了安全风险,即用户的浏览器可能存在漏洞,迫使其在用户计算机上执行 .exe-as-jpg。但是,我认为这仍然不太可能发生(但并非不可能。之前已经完成了,例如 see this )。

    为了防止这种情况,您需要在服务器端检查每个图像以查看它是否真的是图像的代码。然而,这些(可能不存在的)安全风险非常小,即使利用这些风险也需要懂很多计算机和编程的人。就我个人而言,我不会担心这个。

    绝对安全是不可能的(好吧,除了永远不要打开您的计算机。如果它不做任何事情,毕竟什么都不会出错)。这完全取决于您想要多少安全性以及您可以投入多少时间和金钱。

    关于asp.net-mvc - 上传图片 - 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978932/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com