我有一个需要上传 csv 文件的应用程序。
一切正常。我正在成功上传扩展名为.csv的文件。
现在问题来了。有人可能会尝试通过将扩展名更改为并上传到服务器来上传exe文件。.csv
这是完美的上传。有人建议我使用mimetype
. 我遵循本教程。
我正在获取null
csv 文件的 mimetype。
所以你能帮我如何只上传csv文件吗?
提前致谢
我有一个需要上传 csv 文件的应用程序。
一切正常。我正在成功上传扩展名为.csv的文件。
现在问题来了。有人可能会尝试通过将扩展名更改为并上传到服务器来上传exe文件。.csv
这是完美的上传。有人建议我使用mimetype
. 我遵循本教程。
我正在获取null
csv 文件的 mimetype。
所以你能帮我如何只上传csv文件吗?
提前致谢
好吧,你是在正确的轨道上。您需要进行某种文件检查,而不仅仅是信任文件扩展名。
要么你必须自己编程,要么使用第三方库(这就是你正在做的)。
如果您继续使用第三方框架,则您必须遇到配置问题。问题是我无法从您的描述中看出,因为我不知道图书馆。
如果您只对识别 CSV 文件感兴趣,我会推荐一些至少您理解并可以控制的简单方法。比如这种方法:
假设 CSV 文件由 0..n 行具有相同数量的元素 pr 组成。行,由以下字符之一分隔:, ;
EXE 文件不太可能具有这种结构,除非有人在了解您的实现的情况下故意攻击您的系统。
阅读前几行。
在正则表达式 ([,;]) 上拆分它们。
检查结果是否具有相同数量的元素。
为了更加安全,请检查它们是否在同一个字符上分开。
即使您设置了 mimetype,我猜这也只能由文件扩展名确定。所以设置.csv
很可能仍然会绕过它。
如果您发现字符数据以外的任何内容引发错误或忽略文件,我会做的只是读取文件以获取 ASCII 数据。通过数字范围循环和比较,或者您可以将其读取为字符串并使用正则表达式,例如[^\\p{ASCII}]
据我所知,您无法阻止某人将任何文件类型上传到您的服务器,特别是由于您所说的更改扩展名等问题。您唯一的可能是在收到文件后尝试将其解析为 *.csv。如果成功解析它,则将其存储在存储库中并以成功消息响应,如果没有,则忽略该文件并以错误消息响应。
显然,您可以使用 Javascript 解析 csv 文件客户端,但您应该始终验证您的文件服务器端。
Myme type 仅告诉您的服务器预期的类型,但这不会阻止某人向您发送非 csv 文件。