使用 ajax 和 json 的 XSS

XSS using ajax and json

假设我有一个第三方 API,我从中收到 ajax 回复,其中包含一些图片的 URL 并且仅以两种方式使用:作为 [=12= 的参数] 函数并作为 <img> 标签的来源。这安全吗?我可以确定在这种情况下没有 XSS 是可能的,即使我不信任提供提到的服务器 API?

JSON.parse 是安全的,但是如果您在页面中显示图像,例如:

var o = JSON.parse(reply)
var i = "<img src='" + o.path +'>"
someElement.innerHTML = i

然后 XSS 可以像这样完成,例如:

{"path" : "aaa.jpg' onload='alert(1)"}

为了避免创建图像元素并通过 js 设置其属性就足够了:

var i = document.createElement('img')
i.src = o.path
someElement.innerHTML = ''
someElement.appendChild(img)

那就万事大吉了