http://mdsec.net/auth/420/
2.JSON
下面我们对上一个示例稍做修改,应用程序将不再在动态调用的脚本中执行函数回调,而是返回包含用户个人资料的JSON数组:
如第3章所述,JSON是一种灵活的数据表示形式,并且可以由JavaScript解释器直接处理。
在旧版本的Firefox中,攻击者可以执行一次跨域脚本包含攻击,通过覆盖JavaScript中的默认Array构造函数来捕获这些数据。例如:
此攻击修改默认的Array对象,并定义一个定制的setter函数(在为数组中的元素分配值时将调用该函数)。然后,它执行包含JSON数据的响应。JavaScript解释器将处理这些JSON数据,构造一个Array来保存它们的值,并对数组中的每个值调用攻击者定制的setter函数。
由于此类攻击已于2006年被发现,因而开发者已对Firefox进行了修改,以防止在数据初始化过程中调用定制的setter函数。此攻击无法在当前版本的浏览器中实施。