0

我有一个需要上传 csv 文件的应用程序。

一切正常。我正在成功上传扩展名为.csv的文件。

现在问题来了。有人可能会尝试通过将扩展名更改为并上传到服务器来上传exe文件。.csv这是完美的上传。有人建议我使用mimetype. 我遵循教程。

我正在获取nullcsv 文件的 mimetype。

所以你能帮我如何只上传csv文件吗?

提前致谢

4

3 回答 3

1

好吧,你是在正确的轨道上。您需要进行某种文件检查,而不仅仅是信任文件扩展名。

要么你必须自己编程,要么使用第三方库(这就是你正在做的)。

如果您继续使用第三方框架,则您必须遇到配置问题。问题是我无法从您的描述中看出,因为我不知道图书馆。

如果您只对识别 CSV 文件感兴趣,我会推荐一些至少您理解并可以控制的简单方法。比如这种方法:

假设 CSV 文件由 0..n 行具有相同数量的元素 pr 组成。行,由以下字符之一分隔:, ;

EXE 文件不太可能具有这种结构,除非有人在了解您的实现的情况下故意攻击您的系统。

阅读前几行。

在正则表达式 ([,;]) 上拆分它们。

检查结果是否具有相同数量的元素。

为了更加安全,请检查它们是否在同一个字符上分开。

于 2012-12-12T10:02:25.650 回答
1

即使您设置了 mimetype,我猜这也只能由文件扩展名确定。所以设置.csv很可能仍然会绕过它。

如果您发现字符数据以外的任何内容引发错误或忽略文件,我会做的只是读取文件以获取 ASCII 数据。通过数字范围循环和比较,或者您可以将其读取为字符串并使用正则表达式,例如[^\\p{ASCII}]

于 2012-12-12T10:10:46.403 回答
1

据我所知,您无法阻止某人将任何文件类型上传到您的服务器,特别是由于您所说的更改扩展名等问题。您唯一的可能是在收到文件后尝试将其解析为 *.csv。如果成功解析它,则将其存储在存储库中并以​​成功消息响应,如果没有,则忽略该文件并以错误消息响应。

显然,您可以使用 Javascript 解析 csv 文件客户端,但您应该始终验证您的文件服务器端。

Myme type 仅告诉您的服务器预期的类型,但这不会阻止某人向您发送非 csv 文件。

于 2012-12-12T10:13:25.423 回答