最近工作上接手的一个项目使用到了Highcharts。
它是一个开源图标库。
XSS攻击简析
该库允许使用者传入 HTML 来自定义图表的某些部分。
比如官方实例:An HTML table in the tooltip
恰好我司业务需求中,要把用户输入的内容展示在 tooltip
中。
这就很容易出现 XSS攻击 漏洞。
假设上面实例的中 series
name
为用户输入的内容,如果用户输入为
<img src=0 onerror=alert(1) />Short
时,就触发了XSS攻击。有漏洞的代码
此处并非 Highcharts
的漏洞,任何允许自定义HTML的地方都会存在此问题。
这就要求我们在使用用户输入的内容渲染图表时,一定要特别注意。
修复漏洞
关于XSS攻击
各位可以参考美团的文章:前端安全系列(一):如何防止XSS攻击?
如文章中所说,我们在拼接HTML时,需要把用户输入的内容进行转义。
大家可以使用 lodash.escape
如果觉得使用第三方库太麻烦也可以直接引用lodash.escape的源码
:
1 | const htmlEscapes = { |
再次修改后的代码 漏洞已修复。