【发布时间】:2021-03-08 16:17:05
【问题描述】:
我有一个带有 .NET Core 后端的 Angular 应用程序。
要执行批量导入,用户可以上传包含多行的文件。每行包含一个电子邮件地址,然后被邀请为应用程序创建一个帐户。
为此,我有一个文件类型的输入字段。
<input type="file">
文件以multipart/form-data 的形式发送到我的后端控制器。
现在验证文件的最佳方法是什么?
目前,我正在根据允许的 ContentType 列表检查 ContentType。此外,我检查了文件的大小,因为具有估计内容的文本文件不应超过 250 KB。
var allowedFileTypes = new List<string>
{
".txt",
".csv",
"text/comma-separated-values",
"text/plain",
"text/richtext",
"text/rtf",
"application/vnd.ms-excel"
};
var maxFileSize = 250000; //250KB
var file = Request.Form.Files.First();
if (!allowedFileTypes.Contains(file.ContentType))
return BadRequest();
if (file.Length > maxFileSize)
return BadRequest();
还有其他方法可以验证文件吗?我需要考虑任何安全问题吗?例如,是否可以在 .csv 文件中注入恶意代码。
【问题讨论】:
-
在您的上下文中“验证”和“处理安全”是什么意思?这些问题在很大程度上取决于您打算如何处理这些文件。
-
旁注:250000 != 250KB。 250KB=250*1024=256000
-
@Magnetron 校正:250KB == 250000B。但是:250KiB == 256000B。
-
@FranzGleichmann 取决于您的上下文。 Windows 使用 KB 作为 1024B,Linux 称之为 KiB。从 OP 上下文来看,他们可能想要 256000B。
标签: c# .net file asp.net-core