gpt4 book ai didi

c# - 如何在此文件上传功能中检查文件是否存在?

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:00 25 4
gpt4 key购买 nike

我正在尝试按照我的编程老师的要求开发具有安全性的上传文件功能。我以这样一种方式实现它,它将检查文件的大小、文件格式和文件的存在。除了检查文件是否存在之外,逻辑运行良好。例如,当我尝试上传一个已经存在的文件时,我不会收到一条消息告诉我该文件已经存在,而且我不知道为什么它不起作用。

protected void UploadFile(object sender, EventArgs e)
{
if(FileUpload1.HasFile)
try
{
string[] validTypes = { "bmp", "gif"};
string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);

if (size < limit)
{
for (int i = 0; i < validTypes.Length; i++)
{
if (ext == "." + validTypes[i])
{
string path = @"~\Images\";
string comPath = Server.MapPath(path + "\\" + FileUpload1.FileName);
if (!File.Exists(comPath))
{
FileUpload1.PostedFile.SaveAs(comPath);
Label1.Text = "File uploaded";
}
else
{
Label1.Text = "Existed";
}
}
else
{
Label1.Text = "Invalid File." + string.Join(",", validTypes);
}
}
}

else
{
Label2.ForeColor = System.Drawing.Color.Red;
Label2.Text = "file is heavy";
}
}

catch (Exception ex)
{
Label2.Text = "The file could not be uploaded. The following error occured: " + ex.Message;
}
}

当我调试代码时,我发现它会执行 else 语句,但它不会向用户显示它,而是在外部 else 语句中显示消息“Invalid File.”。 为什么?

if (ext == "." + validTypes[i])
{
string path = @"~\Images\";
string comPath = Server.MapPath(path + "\\" + FileUpload1.FileName);
if (!File.Exists(comPath))
{
FileUpload1.PostedFile.SaveAs(comPath);
Label1.Text = "File uploaded";
}
else
{
Label1.Text = "Existed";
}
}
else
{
Label1.Text = "Invalid File." + string.Join(",", validTypes);
}

此外,我的导师告诉我,以下行会导致称为路径遍历的漏洞。

string path = @"~\Images\"; 

那么如何防止这个安全漏洞呢? ?有什么想法吗?

最佳答案

你的代码有逻辑问题。
在代码块中

for (int i = 0; i < validTypes.Length; i++)

它总是会为每个文件运行两次。

您可以做什么,将 bool 变量设置为 false。
进入循环内部,如果找到文件,将 bool 值设置为 true 并使用 break 语句。
在循环结束时检查 bool 值并相应地编写代码。

编辑-1

你可以像这样使用而不是遍历数组

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
int pos = Array.IndexOf(stringArray, value);
if (pos >- 1)
{
// the array contains the string and the pos variable
// will have its position in the array
}

在你的情况下

 string[] validTypes = { "bmp", "gif"};
string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
int pos = Array.IndexOf(validTypes , ext );
if(pos>=0)
{
string path = @"~\Images\";
string comPath = Server.MapPath(path + "\\" + FileUpload1.FileName);
if (!File.Exists(comPath))
{
FileUpload1.PostedFile.SaveAs(comPath);
Label1.Text = "File uploaded";
}
else
{
Label1.Text = "Existed";
}
}
else
{
Label1.Text = "Invalid File." + string.Join(",", validTypes);
}

关于c# - 如何在此文件上传功能中检查文件是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15519628/

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