JSONP注入是一个鲜为人知的但是非常广泛和危险的漏洞。它在近几年才出现,由于JSON,web API和跨域通信的急需。
什么是JSONP假设每个人都知道JSON是什么,让我们谈谈一下JSONP。 JSONP来自带有填充的JSON,被创建来绕过常见的限制,例如同源策略。
举个例子。 我们的网上银行应用程序,,实现了一个返回当前用户的交易的API调用。
访问的HTTP请求向我们提供了当前用户的交易内容,JSON格式:
如果我们的报告应用程序,想访问获得交易详细信息,由于同源原则生效(不同的主机),将无法通过AJAX调用该页面。
为了解决这个问题,JSONP发挥了作用。 由于跨域脚本包含(主要用于外部加载JavaScript库,如jQuery,AngularJS等)是允许但不推荐的,一个聪明的技巧显然解决了整个问题:在响应前加上回调。
注意:即使它可能是显而易见的,值得提及的是,当包括脚本跨域时,它将在包含应用程序的上下文中运行,而不是在源的上下文中运行。
添加一个回调到API响应,包裹JSON格式的数据,允许我们加载脚本标签之间的API响应,并通过定义我们自己的回调函数来处理它的内容。
怎么使用JSONP这是你最容易遇到的情况:
2.回调函数是动态的
基本函数调用一个非常常见的示例,其中myCallback回调在响应中硬编码,包裹在JSON格式的数据上:
我们可以通过首先定义myCallback函数,然后在脚本标签中引用API调用来轻松使用它: