首页 文章 精选 留言 我的

精选列表

搜索[密码管理器],共10018篇文章
优秀的个人博客,低调大师

密码学系列之:内容嗅探

简介 内容嗅探,也被称为媒体类型嗅探或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有两中类型,分别是discrete和multipart。 离散类型是代表单一文件或媒介的类型,如单一文本或音乐文件,或单一视频。 多部分类型是指由多个组件组成的文件,每个组件都有自己独立的MIME类型;或者,指封装在一个事务中一起发送的多个文件。例如,电子邮件中多个附件就是一种多部分MIME类型。 我们看下常见的discrete类型: application, 比如:application/octet-stream,application/pdf,application/pkcs8和application/zip等。 audioList, 比如:audio/mpeg,audio/vorbis。 font, 比如:font/woff,font/ttf和font/otf。 image,比如:image/jpeg,image/png和image/svg+xml。 model, 比如:model/3mf和model/vml。 text,比如:text/plain,text/csv和text/html. video,比如:video/mp4。 常见的Multipart类型如下: message,比如:message/rfc822和message/partial。 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/ 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现! 欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册