2

在我正在处理的文件上传功能中,一个重要的问题是我可以保存用户上传的图像的路径。在以下代码中,我已经在基于 Web 的应用程序文件夹中指定了用于保存上传文件的文件夹。我的导师告诉我,我在 asp.net UploadFile 控件的代码隐藏中仍然存在以下几行的安全漏洞,我不知道为什么!!!

string path = @"~\Images\"; 
string comPath = Server.MapPath(path + "\\" + FileUpload1.FileName);

你能告诉我如何防止这种安全漏洞吗?

更新:

谁能告诉我如何避免这种安全漏洞?我仍在努力寻找使这两条线安全的东西。

4

2 回答 2

1

我的导师告诉我,我在 asp.net UploadFile 控件的代码隐藏中仍然存在以下几行的安全漏洞,我不知道为什么!!!

想象一下,如果客户端发送类似..\..\foo.jpg文件名之类的内容会发生什么。

于 2013-03-20T12:38:02.947 回答
0

一个相当简单的解决方法是确保文件名中没有\/字符,方法是剥离直到第一个这样的字符的所有内容。(无论如何这是一个好主意,因为浏览器对上传文件名的处理方式各不相同:有些会发送完整路径,有些只发送纯文件名,有些甚至可能发送假路径。)

简单的方法是使用正则表达式:

string fileName = Regex.Replace( FileUpload1.FileName, @"(?s)^.*[\\/]", "" );

请注意,根据您的操作系统和文件系统,还有其他可能导致问题的字符。一般来说,最安全的选择是去掉所有字符,除了那些你知道是安全的字符,如下所示:

string safeFileName = Regex.Replace( fileName, @"[^A-Za-z0-9\-._() ]", "" );

您可能还想进一步确保文件名的扩展名与您希望文件具有的类型相匹配。

于 2013-03-24T19:02:39.100 回答