乐趣区

Web-上传漏洞及防范

2020 年不太平,各种牛鬼蛇神轮流退场。可能有点忘乎所以,不知哪句评论错了,被知乎封禁了一周。还好,沉着一下,再不参加 zz 相干的话题了。

说回正题,作为码农,网络安全始终以来是个麻烦。最近,在我司保护的一个很旧很旧的网站上,发现有人通过富文本编辑器用的上传接口,偷偷上传了一些不良内容的网页文件。

通常,咱们应用富文本编辑器,以便用户能够公布图文混排的内容,甚至许可增加点附件。但不便的同时,也带来了一些安全隐患,如程序员比拟相熟的跨站攻打、点击劫持等。上传,尤其是容许上传 html 文件,这个危害是十分大的。首先,既然是 HTML,意味着可嵌入任意 JS,跨站攻打、点击劫持天然不在话下;其次,如果您的网站在搜索引擎排名不错,对方可通过 SEO 的模式,将您的网站变成一个倒流通道;如果您的网站波及 zf 相干机构,对方放点黄赌毒内容,也会重大影响到某些单位的形象。

好在大部分富文本编辑器默认只提供插入图片性能,给出的服务端上传示例代码,也限定为仅反对上传图片。但也有一些性能较全的富文本编辑器,默认提供插入附件的性能,上传代码可能反对 pdf/txt/html 等浏览器可预览(执行)的文件类型。咱们网站用的某款编辑器是 5、6 年以前退出的,始终也没降级,而新版编辑器早已移除默认的 html 类型。

先来说下如何利用富文本的上传破绽往网站上传文件。富文本编辑器插入图片、视频、音频、附件,理论插入的是图片、视频、音频、附件的网址,包裹为 <img><video><audio> 等 html 标签。要么间接给一个网址,要么上传后返一个网址。对于后者,服务端须要给出一个接口,提供上传文件性能,并返回文件存入服务器后的网址。以此来看,入侵者齐全不用管前端富文本编辑器的逻辑,间接利用上传接口,上传文件、拿到网址。

这要如何防备呢?咱们曾经晓得了,入侵者基本不必管你前端用的什么编辑器、JS 如何配置,他只须要探查到你的上传接口即可,因而,任何在前端限度不可插入资源都是有效的。进攻方面,我认为有几点,各有利弊:

1、防盗链,为上传目录的申请加个过滤层,当程序发现 referer 不是您的域名时阻断,防止外链造成恶劣影响。这显然防止不了不良内容呈现在站内。

2、临时文件,插入时先将文件上传到长期目录,待提交后内容校验通过,再转移到目标目录,同时替换内容中的网址。长期目录内文件超时主动删除。

3、图文拆散,彻底摈弃富文本,或富文本仅能调节文字排版,图片、附件等用额定的字段存储,也就是说,文件与表单数据是相对捆绑的,表单校验不通过,入侵方就不可能拿到文件网址。

4、文件转码,图片间接转为 base64 文本,利用 <img src=”data:image/png;base64,xxx”/> 的模式与内容混合在一起;如果是图文拆散模式,可将文件存入对应的 Binary 类型字段。这也是保障文件与表单数据捆绑,便于发现,更易封禁。毛病是占用数据库空间,也不便于间接应用支流 HTTP 服务的缓存性能。

以上后 3 条仍然须要人工审查。现如今也呈现一些 AI 内容审核的货色,但训练是件麻烦事,小企业在这方面消耗大量人力物力就得失相当了。而阿里、百度等也有提供内容审核方面的接口,文本、图片均可,有些接口查看速度达毫秒级,齐全能够封装到服务端的表单校验逻辑里。当然,天下没有收费的午餐。如果您的内容齐全由内部人员保护,只用躲避偷偷上传,限度某类用户可用,就够了。

本话题由富文本编辑器引起,那么,是否不必富文本编辑器就高枕无忧了?从技术上来说,只有您的网站凋谢或半凋谢上传,仍然可能存在被上传不良、黑链等内容的图片、文件,依照现行法律法规,这些文件只有在您服务器上,就脱不了干系,只是会不会被发现的问题。

以下面第 3 条为例,图文拆散,当经营人员发现有个图片内容不良,他删除了此条数据,或标识为不公开,内部无奈再浏览,通过条目 ID 关上也显示不存在或不可见,但对个别编程习惯来说,文件可能仍然保留在原处。毁坏的一方仍然能够利用审查前拿到的文件网址,持续通过内部网页指向您的服务器。哪天那个黑站被端了,发现那些资源还都存在您那,冤不冤呀!

退出移动版