密码学系列之:内容嗅探

博弈论实践
• 阅读 2215

简介

内容嗅探,也被称为媒体类型嗅探或MIME嗅探,是检查一个字节流的内容,试图推断其中数据的文件格式的做法。内容嗅探通常用在媒体类型没有被准确指定的情况,用于补偿元数据信息。

本文将会讲解内容嗅探的常用场景和可能出现的问题。

MIME types

MIME的全称是Multipurpose Internet Mail Extensions,多用途互联网邮件扩展。它是一种标准,它表明了文档、文件或各种字节的性质和格式。它是在IETF的RFC 6838中定义的。互联网编号分配机构(IANA)负责定义所有官方的MIME类型。

MIME的结构包含两部分,分别是type和subtype,他们以 / 来进行分割:

type/subtype

类型代表数据类型所属的一般类别,如视频或文本。子类型确定MIME类型所代表的指定类型的确切数据种类。例如,对于 MIME 类型的文本,子类型可能是 plain(纯文本)、html(HTML 源代码)或日历(对于 iCalendar/.ics)文件。

每种类型都有它自己的一套可能的子类型, 一个MIME类型必须包含一个类型和一个子类型。

还可以在后面加上额外的参数:

type/subtype;parameter=value

例如,对于主类型是text的任何MIME类型,可选的charset参数可以用来指定数据中字符的字符集。如果没有指定字符集,默认为ASCII (US-ASCII),除非被用户代理的设置覆盖。要指定UTF-8文本文件,则使用MIME类型text/plain;charset=UTF-8。

MIME类型不区分大小写,但传统上用小写,但参数值除外,因为参数值的大小写可能有或没有特定的意义。

MIME有两中类型,分别是discretemultipart

离散类型是代表单一文件或媒介的类型,如单一文本或音乐文件,或单一视频。

多部分类型是指由多个组件组成的文件,每个组件都有自己独立的MIME类型;或者,指封装在一个事务中一起发送的多个文件。例如,电子邮件中多个附件就是一种多部分MIME类型。

我们看下常见的discrete类型:

  1. application, 比如:application/octet-streamapplication/pdfapplication/pkcs8application/zip等。
  2. audioList, 比如:audio/mpegaudio/vorbis
  3. font, 比如:font/wofffont/ttffont/otf
  4. image,比如:image/jpegimage/pngimage/svg+xml
  5. model, 比如:model/3mfmodel/vml
  6. text,比如:text/plain, text/csvtext/html.
  7. video,比如:video/mp4

常见的Multipart类型如下:

  1. message,比如:message/rfc822message/partial
  2. multipartList, 比如:multipart/form-data 和 multipart/byteranges

浏览器嗅探

因为浏览器使用MIME类型,而不是文件扩展名来决定如何处理一个URL,所以Web服务器在响应的Content-Type头中发送正确的MIME类型非常重要。如果没有正确配置,浏览器很可能会误解文件的内容,网站将无法正常运行,下载的文件也可能会被错误处理。

为了解决这个问题,或者说是更好的用户体验,很多浏览器会进行MIME内容嗅探,也就是通过解析文件的内容,来猜测MIME类型的格式。

不同的浏览器处理MIME嗅探的方式是不一样的。但是他们都可能会产生严重的安全漏洞,因为有些MIME类型是可执行类型的,恶意攻击者可以通过混淆MIME嗅探算法,从而使攻击者可以进行网站运营者或用户都没有预料到的操作,如跨站脚本攻击。

如果不想浏览器端进行嗅探,可以在服务端的响应中设置 X-Content-Type-Options 头,比如:

X-Content-Type-Options: nosniff

这个头最早是在IE 8中支持的,不过现在所有的浏览器基本都支持这个head类型了。

客户端嗅探

我们通常需要在JS中判断浏览器是否是IE浏览器,然后做响应的处理:

var isIEBrowser = false;
if (window.ActiveXObject) {
    isIEBrowser = true;
}

// Or, shorter:
var isIE = (window.ActiveXObject !== undefined);

上面的例子就是非常简单的客户端嗅探,通过判断window是否有ActiveXObject 这个属性来确定这个浏览器是否是IE浏览器。

本文已收录于 http://www.flydean.com/content-sniffing/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
李志宽 李志宽
2年前
2023年最流行的道德黑客工具
道德黑客工具和软件是由开发人员设计的计算机程序或复杂类型的脚本,由安全专业人员用于识别机器操作系统、web应用程序、服务器和网络中的弱点。如今,许多企业都依赖这种道德黑客工具来更好地保护数据免受各种攻击。安全专家使用诸如包嗅探器、密码破解器、端口扫描器等黑
Aimerl0 Aimerl0
4年前
网络渗透测试实验二
写在前面好像没啥好写的,直接开锤,提前验收然后周六去太湖杯看看题网络渗透测试实验二:网络嗅探与身份认证实验目的1.通过使用Wireshark软件掌握Sniffer(嗅探器)工具的使用方法,实现捕捉HTTP等协议的数据包,以理解TCP/IP协议中多种协议的数据结构、通过实验了解HTTP等协议明文传输的特性。2.研究交换环境下的网络
Stella981 Stella981
3年前
MESI协议:Cache 一致性协议
总线嗅探机制把所有的读写请求都通过总线(Bus)广播给所有的CPU核心,然后让各个核心去“嗅探”这些请求,再根据本地的情况进行响应。MESI协议基于写失效(WriteInvalidate)如果某个CPU核心写入一个CacheLine,则会广播一个失效请求告诉所有其他的
Stella981 Stella981
3年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Stella981 Stella981
3年前
HttpWatch v10.x发布,支持在Firefox 35
HttpWatch(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.evget.com%2Fproduct%2F2721)是一款集成的HTTP嗅探器,为IE和Firefox提供新的方法以查看您网站的负载和运行情况。你可以直接在浏览器中调试由web页面生成的网络流量,而无
绣鸾 绣鸾
1年前
Debookee 8 for Mac(网络数据抓包分析工具)
是一款用于网络数据流量分析和嗅探的软件。它为用户提供了一个直观的界面,让他们能够查看和分析来自从网络上的各种设备的数据流量。Debookee具有以下主要功能:实时监控:Debookee可以实时监控网络上的数据流量,并将其显示在用户界面上。用户可以立即查看流
流浪剑客 流浪剑客
1年前
Debookee for Mac 网络数据抓包工具
Debookee是一款用于网络数据流量分析和嗅探的软件。它为用户提供了一个直观的界面,让他们能够查看和分析来自从网络上的各种设备的数据流量。Debookee具有以下主要功能:实时监控:Debookee可以实时监控网络上的数据流量,并将其显示在用户界面上。用