文章目录

  • 简介
  • MIME types
  • 浏览器嗅探
  • 客户端嗅探

简介

内容嗅探,也被称为媒体类型嗅探或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/

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

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

密码学系列之:内容嗅探相关推荐

  1. 密码学系列(一):密码行业、政策介绍

    密码学系列(一):密码行业.政策介绍 管理部门 <密码法>(19年) <密码法>具体章节 第3章 商用密码 第4章 法律责任 相关零散知识 管理部门 国家密码管理局--商密办- ...

  2. 密码学系列 - 椭圆曲线签名的基本原理

    ECDSA 涉及到三个重要的概念 第一个是私钥,私钥是一个只有我自己知道的数字,我可以用私钥去生成签名,比特币使用的私钥是一个256 bit 的整数. 第二个是公钥,公钥是跟私钥配对的一个数,是根据私 ...

  3. 密码学系列 - 棱镜门

    prime256v1 (即 secp256r1) NSA对SECP256r1曲线安置了后门陷阱, 被美国情报人员破解可能性非常大 2013年发生了震惊世界的棱镜门事件.这一年,前中情局(CIA)职员爱 ...

  4. 密码学系列 - 默克尔路径

    默克尔树 (merkle tree) 默克尔树,也称为哈希二叉树,是一种用于有效地汇总和验证大型数据集完整性的数据结构. 默克尔路径 可用于证明在一个很大字节数的区块中上千笔交易中的具体某一笔交易的存 ...

  5. 密码学系列(二):专有名词缩写【持更】

    密码学系列(二):遇到的一些专有名词缩写[持更] 密码学相关 密码产品所需 密码学相关 CRL:证书吊销列表 在线证书状态协议(OCSP):一个互联网协议,用于获取符合X.509标准的数字证书的状态. ...

  6. 密码学系列(四):整理世界性网络安全相关组织、企业的网站【持更】

    密码学系列(四):整理世界性网络安全相关组织.企业的网站[持更] 前言 各网站 Thales 泰勒斯 BI.ZONE RSA Unbound Security Fasso 富信 Intertrust ...

  7. 密码学系列之:SAFER

    简介 分组密码是一个非常优秀的加密结构,很多常用加的加密算法使用的都是分组算法,比如DES.SAFER表示的也是一种分组密码算法.一起来看看吧. SAFER简介 SAFER的全称是Secure And ...

  8. (转) 淘淘商城系列——CMS内容管理系统工程搭建

    http://blog.csdn.net/yerenyuan_pku/article/details/72825801 淘淘商城系列--CMS内容管理系统工程搭建 上文我们一起搭建了表现层中的商城门户 ...

  9. 密码学系列 - 椭圆曲线 ECC - ED25519

    密码学 - 椭圆曲线 ECC ED25519 椭圆曲线是一系列满足如下方程的点: y^2 = x^3 + ax + b 并且 4a^3 + 27b^2 != 0 特性 封闭性:因为椭圆曲线上的点相加, ...

最新文章

  1. 作为阿里的面试官,我有话想说
  2. [转载] Java内存管理-你真的理解Java中的数据类型吗(十)
  3. Java并发编程实战————对象的组合
  4. [HttpClient]HTTPClient PostMethod 中文乱码问题解决方案(2种)
  5. 一起助力!为wuhan2020:武汉新型冠状病毒防疫开源信息收集平台尽一份微薄之力!...
  6. 全网首发:字体引擎中字符图像的插槽
  7. 子空间方法——MUSIC算法
  8. QT界面窗口的显示和隐藏,关闭
  9. 怎样下载网页上的视屏到本地
  10. android 模拟xp,使用Bochs模拟器瞬间安卓变XP教程
  11. 基于深度学习的绘画风格迁移
  12. 爱思服务器能不能更新苹果手机系统,iPhone 无法更新系统怎么办?
  13. 域名系统中的本地域名服务器、根域名服务器、顶级域名服务器以及权限域名服务器。
  14. mysql嵌套select_select 嵌套查询
  15. 超神学院之量子计算机进展,异能等级、武器等级、文明等级及天使等级划分
  16. 感受GSAT,挑战Samsung
  17. 一些opencv小工程(蓝白转换,进度条亮度对比度,鼠标位置读取rgb)
  18. 新中大软件SE+16.0操作手册账务和报表(也适合Gsoft和G3软件)
  19. 《GB9706.1 医用电气设备 第1部分:安全通用要求》安规三项实验
  20. JQ修改css样式小结

热门文章

  1. cmos逻辑门传输延迟时间_CMOS和TTL都有哪些区别?图腾柱电路又是什么,详情进来一瞧!...
  2. Python第三方包-你了解numpy吗(numpy基础)
  3. oracle 的遍历语法,oracle pl/sql之pl/sql语法
  4. 天锋w2019_不知道为什么那么多人喜欢三星W2019,直到入手这款天锋W2019手机
  5. cometoj contest 6(记录型博客)
  6. 两年前搭建的网狐系统
  7. MFC 界面美化 Skinmagic
  8. ADO学习(八)源码示例
  9. 没登录网页也能个性化推荐?一文详解浏览器指纹
  10. 第42讲:scrapy框架的基本使用