密码学系列之:内容嗅探

简介: 密码学系列之:内容嗅探

目录



简介


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


相关文章
|
6月前
|
安全 网络安全 数据安全/隐私保护
网络安全漏洞与加密技术:保护信息的艺术
【8月更文挑战第31天】在数字时代,网络安全和信息安全的重要性日益凸显。本文将探讨网络安全漏洞、加密技术以及提升安全意识等方面的内容。我们将通过实际代码示例和案例分析,深入了解网络攻击者如何利用安全漏洞进行攻击,以及如何运用加密技术来保护数据安全。同时,我们还将讨论如何提高个人和组织的安全意识,以应对不断变化的网络安全威胁。让我们一起探索这个充满挑战和机遇的领域吧!
|
7月前
|
SQL 安全 网络安全
网络防御的艺术:探索漏洞、加密与意识
在数字化时代,网络安全和信息安全成为保护个人隐私和企业资产的关键。本文将深入探讨网络安全中的常见漏洞,介绍加密技术如何作为防御手段发挥作用,并讨论提升安全意识的重要性。文章旨在通过实例分析和技术解读,为读者提供实用的知识分享,帮助他们更好地理解和应对网络安全挑战。
37 0
|
算法 安全 网络安全
《计算机系统与网络安全》第五章 消息认证与数字签名
《计算机系统与网络安全》第五章 消息认证与数字签名
132 0
|
安全 网络协议 网络安全
Nmap脚本扫描解密:揭开网络安全的秘密
Nmap脚本扫描解密:揭开网络安全的秘密
257 0
|
安全 测试技术 数据安全/隐私保护
|
网络协议 数据安全/隐私保护
|
算法 安全 数据安全/隐私保护
听说这玩意可以防篡改——单向散列函数
由于某些原因,访问国外网站的速度较慢,所以我们常使用镜像网站下载文件。假设你正通过镜像网站从网络上下载一款软件,但是如何保证你下载的软件是正版,没有被恶意篡改过呢?怎么保证我的软件的完整性呢?
听说这玩意可以防篡改——单向散列函数
|
安全 网络安全 数据安全/隐私保护
【计算机网络】网络安全 : 实体鉴别 ( 实体鉴别过程 | 不重数机制 | 公钥体质加密不重数 | 中间人攻击 )
【计算机网络】网络安全 : 实体鉴别 ( 实体鉴别过程 | 不重数机制 | 公钥体质加密不重数 | 中间人攻击 )
393 0
【计算机网络】网络安全 : 实体鉴别 ( 实体鉴别过程 | 不重数机制 | 公钥体质加密不重数 | 中间人攻击 )
|
算法 安全 网络安全
【计算机网络】网络安全 : 总结 ( 网络攻击类型 | 网络安全指标 | 数据加密模型 | 对称密钥密码体质 | 公钥密码体质 | 数字签名 | 报文鉴别 | 实体鉴别 | 各层安全 ) ★(二)
【计算机网络】网络安全 : 总结 ( 网络攻击类型 | 网络安全指标 | 数据加密模型 | 对称密钥密码体质 | 公钥密码体质 | 数字签名 | 报文鉴别 | 实体鉴别 | 各层安全 ) ★(二)
266 0
|
安全 算法 网络安全
【计算机网络】网络安全 : 总结 ( 网络攻击类型 | 网络安全指标 | 数据加密模型 | 对称密钥密码体质 | 公钥密码体质 | 数字签名 | 报文鉴别 | 实体鉴别 | 各层安全 ) ★(一)
【计算机网络】网络安全 : 总结 ( 网络攻击类型 | 网络安全指标 | 数据加密模型 | 对称密钥密码体质 | 公钥密码体质 | 数字签名 | 报文鉴别 | 实体鉴别 | 各层安全 ) ★(一)
288 0