网站上传程序没有和文件扩展名有什么区别?怎么办?
优采云 发布时间: 2021-08-23 07:05网站上传程序没有和文件扩展名有什么区别?怎么办?
在网上分享的时候,肯定有一个不能回避的操作,那就是“文件上传”。我们经常在微博、微信朋友圈等发帖,发送过程中使用文件上传中的图片上传功能。将本地图片、视频、音频等文件上传到节目服务器,供其他用户浏览或下载。这导致网站每天都有大量数据流入。海量数据在带来用户的同时,也带来了一些安全问题。
在网站存储空间中,网站的开发者经常会发现各种xml、html、apk等垃圾文件,这些文件被注入广告,或者传播*敏*感*词*视频等资源,严重影响网站Business 运营。这些垃圾文件通过文件上传功能上传到网站存储空间。如果网站upload 程序不对用户提交的数据进行检查或严格过滤,服务器可以轻松上传修改后的数据。
文件上传是最容易被利用的数据安全部分。为了减少恶意文件上传的中断,首先要搞清楚它的原理。
文件类型和文件扩展名的作用
计算机数据内容一般存储在硬盘等存储硬件上。由于硬盘本身的空间巨大,就像一个大仓库,为了方便数据的存储和管理,我们创造了文件的概念,即操作系统使用文件格式封装一段数据存储在空间。
但是,随着互联网的发展,从最初的纯文本文件到今天的各种类型的多媒体文件,如图片、音频、视频等,我们存储的文件越来越多,类型也越来越丰富,文件体积越来越大,如果不区分这些文件,找起来会极其麻烦。于是文件格式(或文件类型)应运而生。每种类型的文件都可以以一种或多种文件格式保存在计算机存储器中。每种文件格式通常都有一个或多个可用于识别的扩展名,扩展名可以帮助用户和应用程序识别文件格式。
比如有一个文件名为README.txt,.txt是这个文件的扩展名,txt适用于纯文本文件。这种类型的文件可能是一个说明性文件,文件内容为纯文本。
此外,扩展还可以帮助操作系统确定如何读取文件。例如文件score.doc,doc文件可以用Word打开,然后Windows用户双击.doc文件后,Windows系统会搜索“这个扩展文件可以根据文件扩展名打开” doc“自维护数据库表程序”,如Word程序,之后系统会自动启动Word程序并通知Word加载文件。
从这里可以看出,Windows系统打开文件时,只需要文件名中的扩展名就可以找到对应的程序。因此,改变文件的扩展名也会改变文件在系统中的默认打开方式。并且如果文件本身的内容不符合程序对文件内容格式的期望,打开时就会出错,或者出现意想不到的结果。
浏览器如何识别打开的文件
由于互联网工具功能的逐步完善,相比本地打开文件,用浏览器打开文件的概率逐渐增加。那么,浏览器是如何确认被访问资源的文件类型的呢?其实是通过响应头来判断的。
当用户输入 URL 时,资源所在的服务器会响应一个 Content-Type 响应头,其值为文件对应的类型(MIME 类型)。如果浏览器支持这种格式,浏览器会尝试渲染并显示相应的文件。
与 Windows 系统相比,浏览器通常使用 MIME 类型而不是文件扩展名来处理 URL。因此,在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会扭曲文件内容,对下载的文件进行错误处理,影响网站的正常运行。
恶意文件是如何上传的
一开始我们提到了一些恶意资源会通过上传文件的方式被上传。这些恶意资源的文件格式显然是正常格式,但打开后会出现网页跳转等特殊访问效果。这是怎么做的?
其实原理很简单,就是修改MIME类型所做的操作。比如上面的test.jpg图片。虽然URL链接的资源后缀是jpg,但真正资源的文件类型是text/html,即网页类型。
此类网页的文件支持嵌入JS代码,打开文件的用户可以通过这些代码重定向到指定的网站。这种现象虽然看起来和DNS劫持很像,但实际上是不同的。关于DNS劫持问题,可以参考【白话科普】谈DNS知识》了解更多。
看来这类恶意文件是通过修改文件MIME来实现的,那么我们是否可以通过限制MIME等方式来减少此类恶意文件的上传和访问呢?是的,方法很多,我们再以云存储为例,一一讲解。
防止恶意文件上传方法
身份溯源-TOKEN上传
使用TOKEN上传时,TOKEN认证会使用终端上传文件的标识信息来计算TOKEN,控制上传有效期,固定上传目录或上传后缀。不同于一般的所有用户使用服务器上的运营商信息进行认证和上传的方式,云存储提供的TOKEN认证可以实现更细粒度的权限控制。
启用TOKEN功能后,我们可以为每个用户分配一个独立的标识,这样用户上传的文件就会根据标识存放在一个单独的目录中。
X-Upyun-Uri-Prefix = /服务名/client_37ascii // 用户标识前缀,对应存储上的一个目录,如 /client_37ascii/
X-Upyun-Uri-Postfix = .jpg // 限定上传文件后缀
通过这种方式上传的文件可以通过识别快速追溯,找出谁上传了大量恶意文件并进行处理。
文档证明-内容-类型
第二种方式是限制文件名。我们可以限制上传文件的MIME类型,比如将上传的图片限制为Content-Type类型,这样即使上传了恶意文件,浏览器访问时,浏览器也会强制按照图像格式。资源将无法解析,从而限制对恶意文件的访问。
云存储的REST API和FORM API都支持Content-Type的强制设置。其中FORM API支持多种限制方式:
具体用法,我们以Java SDK Form API上传为例:
//初始化uploader
FormUploader uploader = new FormUploader(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);
//初始化 policy 参数组 Map
final Map paramsMap = new HashMap();
//添加 SAVE_KEY 参数
paramsMap.put(Params.SAVE_KEY, savePath);
//添加文件上传限制
paramsMap.put(Params.CONTENT_TYPE, "image/jpg"); //强制文件MIME类型
paramsMap.put(Params.ALLOW_FILE_TYPE, "jpg,jpeg,png"); //强制文件扩展名
paramsMap.put(Params.CONTENT_LENGTH_RANGE, "102400,1024000"); //强制文件大小,单位字节
//执行上传
uploader.upload(paramsMap, file);
只要在上传设置中设置了上述任何一个参数,如果有上传请求,云存储会检测上传文件的内容,然后使用判断值匹配上传指定值。如果匹配成功,则允许上传,匹配失败。返回 403 状态代码。
访问被拒绝边缘规则
上面提到的两种方法是在上传时排除恶意文件。我应该如何处理上传的文件?
对于伪装成图片上传的恶意资源,我们可以通过边缘规则进行识别。通过在每个图片链接中添加隐式云处理图片参数,恶意文件无法正常显示,出现405错误反馈。
除了图片限制,如果在图片空间发现大量恶意APK,我们也可以通过边缘规则快速禁止访问。
热门链接-统计分析
如果文件多,文件类型多,排错时间会比较长,需要立即排查问题。也可以看看亚拍云的日志分析功能。该功能统计每天各服务下访问域名的访问状态,可根据热门文件、热门客户端、热门参考文件、资源状态码、文件大小、热门IP等维度统计TOP 1000分析数据。
统计分析可以帮助您对服务进行全面盘点。如果您发现某个资源或某个IP的访问频率异常高,可以及时定位并排查。
信息安全-内容识别
如果你的网站流量很大,上面的方法不适合限制。也可以看看天擎和天策这两款内容识别工具。
这两款工具以AI智能安防检测为核心,利用机器学习分类算法对图片、视频等信息进行“智能”审核,逐渐将“专业评估师”从专业变成“智能”算法”和“模型”。解放人力,大幅提升加工效率,帮助企业降低投入成本。为客户提供内容安全预警、内容安全数据、内容安全审查服务,提供完善的网络信息内容安全解决方案,
目前已有多家互联网公司和政府部门提供了从引擎识别到人工审核的低延迟、高精度、可视化的一站式内容安全服务。