需要转义或替换哪些字符以防止xss jsonp回调攻击?

时间:2018-08-25 21:04:44

标签: javascript jsonp xss

以前是asked here.,因此再次要求获得更好的答复。

我有一项服务,允许用户指定一个回调函数名称,该名称将包装返回的数据以支持jsonp回调。我想确保我涵盖了防止XSS攻击的所有基础。

请注意,我已经阅读了OWASP security checklist,但似乎没有任何建议可以直接解决这个问题。

这些是当前支持的用于指定jsonp函数的方法,其中函数名称为cbFn并且cbFn单独声明,对象上的方法或从对象/数组访问的方法:

https://service.com/cbFn
https://service.com/?callback=cbFn
https://service.com/?callback=obj.cbFn
https://service.com/?callback=obj['cbFn']
https://service.com/?callback=obj[1]

这些返回:

cbFn({data: 'data being returned'})
obj.cbFn({data: 'data being returned'})
obj['cbFn']({data: 'data being returned'})
obj[1]({data: 'data being returned'})

但是以下请求也有效,并且是我想避开的已知XSS问题:

// executes an anonymous function
https://service.com/?callback=(()=%3E{alert(1)})
// replaces the user's callback function with our own
https://service.com/?callback=cbFn=((data)=>{alert(data)})

仅替换/删除回调名称中的字符()=>就足以防止XSS漏洞吗?我想允许函数名称使用完整的有效javascript字符集,因此将有效字符范围限制为/[$_\w]+/(字母数字加$和_)似乎不是一个好选择。

0 个答案:

没有答案