这是一个比较有意思的研究,就是一个网站的数据返回包中,如果没有设置content-type这个数据头的话,而且内容是可操控,那么我们就可以利用MIME让浏览器把文件当作网页来显示。
比如说,一个网站如果可以上传图片,只检查了文件名,我们可以在内容中插入一段html代码,内容可以是一个xss的payload,如果服务器在输出这个图片的时候,没有自动加上content-type,浏览器就会将其当作网页执行,然后出现弹窗。
但是现在问题在于服务器会自己自动加上content-type这个头
那么还有一种方式,apache有一种特性,就是文件名如果是只有.的话,那么就不会返回content-type这个头,那么我们的文件就可以成功当作网页读取了,具体如下。
上传文件,然后直接访问
这种方式,其实在现实环境下,基本上大多数的网站都存在着将文件名修改之后保存的操作,所以限制很大。
那么什么样的centent-type才会被浏览器解析为网站呢,
application/zip
application/json
application/octet-stream
text/html
text/json
text/plain
huli/blog
font/woff2
这些返回头都是可以解析为网页的。
想要关闭这种机制,我们只需要在返回包种新增一个数据头:
X-Content-Type-Options: nosniff
这样上面的就都不可以执行了。