文件上传要考虑的点

创建:xiaozi · 最后修改:xiaozi 2019-07-27 16:25 ·

上传文件的校验

文件名的校验

长度判断

  1. 超过DB字段长度会报错

  2. 操作系统对文件名的长度有一定的限制

特殊字符的校验

某些字符不可能是文件名,当通过浏览器指定文件名下载的时候,可能会出错

上传频率的校验

如果支持批量文件上传的话,那咱接口的qps应该是分段集中的图,我们需要制定一下这种情况下的限定策略

  1. IP限制的策略

  2. 用户限制的策略

上传速度的限制

如果不限制上传速度的话,用户上行速度比较快的时候, 一个用户的上传可能就会瞬间打满服务器的网卡

扩展名的校验/MIME的校验

体积的校验

  1. 限制特大文件

  2. 限制用户可以上传的空间余额

尺寸的校验

主要用于 图片,视频 的限制,不符合宽高比,或者某个分辨率的时候,需要作出相应的提示

MagicBytes的校验

为什么要对文件的头字节进行校验?

文件的头字节可以判断这个文件是否是真的图片(isImage),也可以矫正写错扩展名的图片(guessSuffix);如gif的写成了jpg;不至于被可执行文件伪装的jpg入侵

上传附件文件名的生成

201707/31/123432X{16}_200x200.jpg
Note

URL中的时间

从犯罪团伙的诈骗案例讲起,某日平台接到大量C端客户被诈骗的举报;某诈骗团伙批量copy线上已经存在的商品,然后将商品的价格稍稍改低,这样就会通过搜索获取大量的流量;在用户购买完商品之后,回复没货,获取用户的联系信息,通过电话进行诈骗。

通过分析,诈骗团伙copy的商品大多都是正常卖家一段时间之前发的商品,由于在同一个平台上,诈骗团伙连图片都没有重新上传

根据这一信息,我们在发布商品的时候静默的记录这些数据(这规则如果公布了,就很容易被越过)(校验方式,通过在图片的url中加入时间信息),并对这些帐号进行标记

如果直接修改url中的时间,是不是可以直接越过后端的校验呢?是的,但是这样,图片也就失效了,可以直接忽略

那如果下载了图片再上传,这使用程序实现不是什么麻烦的事情,那怎么办?使用相似图片识别功能,判别同款 (其实这个在正常的商家发布商品之后,就有这样的审核逻辑)

Note

URL中的尺码

在很多业务中,为了前端页面显示的美观,或者其他什么原因;通常需要限制图片的比例和大小,但是上传图片和保存业务数据是分开的两个request,恶意请求很容易跳过上传这个步骤直接保存

现在我们有个比较严谨的方法对传过来的图片url做校验,下载CDN上的图片,判断图片的尺码;但是想想,每次保存,那么大的图片量,这样的响应时间是吃不消的;

退而求其次,我们可以通过在图片的URL上加上原始尺寸,这样在保存的时候只要对URL字符串进行分析就可以了

同样的,如果直接修改URL中的原始尺寸,这样的图片不存在,可以直接忽略


浏览 27780 次

ホーム - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-25 16:07
浙ICP备14020137号-1 $お客様$