提问人:developer_aleksi 提问时间:11/6/2023 最后编辑:developer_aleksi 更新时间:11/6/2023 访问量:40
路径遍历,从 url 浏览器栏访问服务器文件目录,ASP.NET 2.0 中的 Web 应用程序构建
Path traversal, access server files directory from url browser bar, web App build in ASP.NET 2.0
问:
我有一个使用 ASP.NET 2.0 设计的旧项目,使用 IIS 8.0 编写 VB 9.0 用户登录后,通过浏览器的 URL 栏,用户可以访问服务器的文件并下载它们。
此 Web 应用程序的一项操作是授予用户从唯一路由(C 中的文件夹,服务器)下载某些文件或文件夹的权限。
更具体地说:
在主页上时:https://xx.xx.xx.xx./My_app/operations/home.aspx
然后具有访问权限并下载文件。
此外,此弹出窗口正在通过 JavaScript 运行:operations/ManageFiles/FileDownload.aspx?
在网上搜索后,我尝试了不同的方法。
- 在IIS管理器中重写入站规则
·在 Web 配置中添加:System.Web 中所需的验证=true
- 在上面的文件中添加 JavaScript 代码,其中包括弹出窗口:
`if (user_input.indexOf('\0') !== -1) {
return respond('Access denied');
}`
- 在 Visual Basic 中添加验证代码:
'
Dim path2 As String = Request.QueryString("filename")
First Validation
If path2.IndexOfAny(Path.GetInvalidFileNameChars()) > -1 Then
Throw New FileNotFoundException(“Error”)
End If
' Second Validation
If path2.IndexOf(Chr(0)) <> -1 Then
Throw New ApplicationException("Access Denied")
End If
' Third Validation
If String.IsNullOrEmpty(path2) Then
Throw New ApplicationException("Error, something is wrong...")
Else
' Url decode to reveal encoded attempts e.g. '%2f' (/) or '%2e%2e%2f' (../)
Dim decodedPath As String = HttpUtility.UrlDecode(path2)
Try
If decodedPath.Contains("/") Then
Throw New Exception()
End If
If decodedPath.Contains("\") Then
Throw New Exception()
End If
If decodedPath.Contains("$") Then
Throw New Exception()
End If
If decodedPath.Contains("..") Then
Throw New Exception()
End If
If decodedPath.Contains("?") Then
Throw New Exception()
End If
Catch ex As Exception
Throw New Exception()
End Try
End If`
上述这些尝试都对我不起作用,用户仍然可以访问敏感文件。
我无法确定,在项目中的哪个位置添加验证,以及上述潜在解决方案是否有效。我需要你的建议。
先谢谢你。
答: 暂无答案
评论
FileDownload.aspx