mime嗅探的默认行为及Markdown文件响应格式

mime嗅探的默认行为及Markdown文件响应格式

目录

mime嗅探的默认行为及Markdown文件响应格式

一、何谓mime嗅探

二、mime嗅探的机理

2.1、发现mime的charset值为空。2.2、发现mime的本质essence[主类型/子类型]为空。2.3、发现mime的子类型mimeType为空。2.4、发现Content-Type响应标头需要获取、解码和分割才能得到结果,返回空。2.5、以上若值为空,则返回失败。2.6、对于多值values的每个值

2.7、如果mimeType为空,则返回失败。2.8、返回mimeType

三、html文档与text主类型

3.1、html的mimeType

3.2、文本类型的mimeType

3.3、错误的mimeType声明导致的结果

3.3.1、原本是想执行text/javascript结果被误判【嗅探】为结构解析

3.3.2、原本是想让js加载css进行样式渲染结果被误判【嗅探】为结构解析

3.3.3、原本是想让js加载.md文件注入到iFrame中的html结果被误判【嗅探】为结构解析

3.4、最终导致致命错误而被浏览器用户代理判定为404资源不存在

四、不同的mimeType文本格式产生不同的响应格式

4.1、虽然.txt 响应200 ok但这并非你想要的格式

4.2、错误的mimeType导致错误的.md的格式

 4.3、修正.md正确的mimeType的响应结果

五、mime嗅探的潜在风险及规避

5.1、text/html和text/markdown的本质区别

5.2、xss注入风险

5.3、mime嗅探潜在风险规避步骤

本博客相关博文 

喜欢就点赞、收藏,鼓励我坚持更多原创技术写作


一、何谓mime嗅探

        mime嗅探,英文MIME Sniffing,它是浏览器的默认行为,当用户请求某个资源,浏览器用户代理拦截响应时,若发现应用服务未明确声明该资源的内容类型时,或浏览器判断服务申明的内容类型貌似不正确时,浏览器便开启了其默认的“mime嗅探”行为。

二、mime嗅探的机理

        ` Content-Type` 标头在 HTTP 中定义较为广泛。由于 HTTP 中定义的模型与 Web 内容不兼容,按照HTTP标准模型来进行处理,从响应中提取Content-Type并进行识别处理,返回失败或正确的mime类型步骤:

2.1、发现mime的charset值为空。
2.2、发现mime的本质essence[主类型/子类型]为空。
2.3、发现mime的子类型mimeType为空。
2.4、发现Content-Type响应标头需要获取、解码和分割才能得到结果,返回空。
2.5、以上若值为空,则返回失败。
2.6、对于多值values的每个值

2.6.1、让temporaryMimeType成为解析value的结果。
2.6.2、如果temporaryMimeType失败或其本质为“ */*”,则继续。
2.6.3、将mimeType设置为temporaryMimeType。
2.6.4、如果mimeType的本质essence[主类型/子类型],则:
2.6.4.1、将其参数[字符集charset]设置为空。
2.6.4.2、如果mimeType的参数[" charset"]存在,则将charset设置为mimeType的参数[" charset"]。
2.6.4.3、将essence设置为mimeType的本质essence。
2.6.4.5、否则,如果mimeType的参数[" charset"] 不存在,并且charset非空,则将mimeType的参数[" charset"] 设置为charset。


2.7、如果mimeType为空,则返回失败。
2.8、返回mimeType

        如果浏览器提取MIME类型返回失败,或者MIME类型的本质与给定格式不符,则应将其视为致命错误。现有的Web服务功能并非始终遵循此规则。
        多年来,这一直是这些Web服务功能安全漏洞的主要来源。相比之下,MIME类型的参数通常可以安全地忽略。

三、html文档与text主类型

3.1、html的mimeType

        html的mimeType是text/html;charset=UTF-8。

3.2、文本类型的mimeType

        常用的有:text/plain,text/html,text/xml,text/markdown,text/javascript,text/css等。

3.3、错误的mimeType声明导致的结果

        以下为旧版的【遗留格式】,不建议使用 :

标头(与网络上的一样) 输出(序列化)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专讲冷知识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值