避坑指南纪念版 (避坑指南名单)

现在有这样一个业务场景:为了防止有用户恶意攻击系统,现在系统需要对用户上传的文件进行校验,只允许用户上传后缀为docx、xls、xlsx、pdf、txt、jpg等格式的文件。

这是一个非常简单的安全需求了,我们的设计思路基本上都是先获取到用户上传的文件的文件名,然后对文件名进行解析,获得文件后缀,最后判断后缀在不在我们设置的白名单上。

现在我们的问题是如何对文件名进行解析,获得文件后缀?

很简单,可以直接使用.分割文件名,获取文件最后的后缀,如下:

避坑指南标志,避坑指南名单

避坑指南标志,避坑指南名单

大家可以想一想,上面的这种写法有没有问题?

避坑指南标志,避坑指南名单

避坑指南标志,避坑指南名单

避坑指南标志,避坑指南名单

其实有问题,如果有这样一个文件名:财务报表-2023.07.12.xlsx,上面的代码还适用吗?

避坑指南标志,避坑指南名单

避坑指南标志,避坑指南名单

这就是我们最近在生产环境中发生的血淋淋的教训,分割文件名获取后缀时错误,导致用户无法上传附件,业务无法进行。

那应该怎么改呢,其实也很简单,按最后一个“.”拆分就可以了,如下是一种改法:

避坑指南标志,避坑指南名单

避坑指南标志,避坑指南名单

今天的避坑指南就到这里了,魔鬼藏在细节里