路径遍历是指某人将文件上传到您的站点并可以直接从 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
。这意味着用户正在上传图像,但只有当它使用某个链接从您的站点页面发出请求时才允许查看它。