关于JSONP
JSONP全称是JSON with Padding,是基于JSON格式的为解决跨域请求资源而产生的解决方案。它的基本原理是利用HTML的元素标签,远程调用JSON文件来实现数据传递。如果想在a.com域下获取b.com下的JSON数据(getUsers.JSON):
URLdecode为:
+/v8为utf7-BOM,其后为我们注入通过utf-7编码后的XSS代码:
<htm><body><script>alert(1);
</script></body></htm>。
关于这个案例的详情可参考。
利用utf7-BOM是一种非常有代表性的通用方法,除了升级IE进行防御,开发者也可直接指定Content-Type的编码(Content-Type: application/json; charset=utf-8)。然而尽管如此,仍有绕过这些防御措施的可能。
上文提到的a、b两种防御缺一都可能出现问题,那么我们使用“a+b方案”是否就万无一失了呢?一切皆有可能,我们拭目以待。
其他文件格式(Content-Type)与JSON
【MHTML与JSONP】