[英]How to upload only csv files into the server in Java
我有一个需要上传csv文件的应用程序。
一切正常。 我正在成功上传扩展名为.csv的文件。
现在这是问题所在。 有人可能会尝试通过将扩展名更改为.csv
来上传exe文件并上传到服务器。 完美上传。 有人建议我使用mimetype
上传文件。 我遵循本教程。
我正在为csv文件获取mimetype null
。
因此,您能帮我如何仅上载csv文件吗?
提前致谢
好吧,你没有错。 您需要进行某种类型的文件检查,而不仅仅是信任文件扩展名。
您必须自己编写程序,或者使用第三方库(这是您正在做的事情)。
如果您使用第三方框架,则必须遇到配置问题。 从您的描述中我看不出是什么问题,因为我不知道图书馆。
如果您仅对识别CSV文件感兴趣,我建议您至少了解并可以控制的简单方法。 如这种方法:
假设CSV文件由0..n行组成,且行数相同。 行,以下列字符之一分隔:
除非有人知道您的实现故意地攻击您的系统,否则EXE文件不太可能具有这种结构。
阅读前两行。
在正则表达式([,;])上拆分它们。
检查结果是否具有相同数量的元素。
为了提高安全性,请检查它们是否在同一字符上分开。
即使您设置了mimetype,我猜也只能由文件扩展名决定。 因此设置.csv
最有可能仍会绕过它。
如果您发现除字符数据以外的任何其他信息引发错误或忽略文件,我将只是读取ASCII数据文件。 循环并通过数字范围进行比较,或者您可以将其读取为字符串并使用[^\\\\p{ASCII}]
等正则表达式
据我所知,您不能阻止某人将任何文件类型上传到您的服务器,特别是由于您所说的诸如更改扩展名之类的问题。 您唯一的可能性是,在收到文件后,尝试将其解析为* .csv。 如果成功解析,则将其存储在存储库中,并显示一条成功消息,否则,您将忽略该文件,并显示一条错误消息。
显然,您可以使用Javascript解析csv文件客户端,但是您应该始终验证文件服务器端。
Myme类型仅告诉您的服务器需要什么类型,但这不会阻止某人向您发送非csv文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.