0

路径遍历的概念对我来说是新的,需要一些指导。

在我的项目中,我有以下代码行:

uploadimg.SaveAs(Server.MapPath("tempfiles/" + fUIName));
FileUpload1.SaveAs(Server.MapPath("tempfiles/" + fSIName));

这段代码是否PathTraversal易受攻击。

任何人都可以帮助我理解路径遍历的概念以及如何删除/避免它。谢谢!

编辑1:

还提到我将文件tempfiles临时存储在文件夹中。完成保存文件的目的后,我将从tempfiles. 那么我可以跳过这个漏洞吗?请指导。谢谢!

4

1 回答 1

0

路径遍历是指某人将文件上传到您的站点并可以直接从 URL 访问它(如果他知道路径,或者可以从其他页面找到它)。

例如,假设您上传了一个名为的 pdffile.pdf文件tempfiles/

然后你可能在某个页面上显示为http://example.com/tempfiles/file.pdf

现在攻击者知道文件上传到哪里,然后将它上传给你一些其他文件,可能是一个html with fraud,可能server browser是一个 aspx 页面中的一些等等......并直接从 url 调用它。

解决方案

您可以将所有文件上传到无法直接访问的安全文件夹。App_Data

您可以将其上传到您更改权限的文件夹,并且您无法直接访问它。(请参阅此处如何做到这一点如何在 IIS 上为 ASP.NET 设置正确的文件权限

您可以限制您上传的内容的扩展名,例如只允许图像,并将其放在该目录中,以避免任何人在那里运行任何东西。

<configuration>
    <system.web>
      <authorization>
        <deny users="*" />
      </authorization>
    </system.web>
</configuration>

现在,如果您将 pdf 上传到用户无法直接从 url 访问的目录,您需要创建一个处理程序来返回上传的文件。处理程序必须知道是否允许用户查看文件、文件是否安全、文件是否直接来自站点。

一些简单的例子。 通过调用 .ashx 页面下载文件在 asp.net 中显示备用图像

最后一个解决方案是检查引用并确保它来自您的站点,而不是使用 this 从 url 直接调用HttpContext.Current.Request.UrlReferrer.Host。这意味着用户正在上传图像,但只有当它使用某个链接从您的站点页面发出请求时才允许查看它。

于 2022-03-02T11:38:36.663 回答