白盒测试时如何检测前端代码中的XSS漏洞?
我在做项目的安全自查,听说白盒测试要查XSS,但不太清楚具体该看哪些地方。比如用户输入的内容在页面上展示时,是不是只要用了innerHTML就有风险?
我试过用ESLint的security插件,但它好像只报一些明显的危险函数。有没有更系统的方法?比如下面这种动态插入HTML的场景:
const userComment = getQueryParam('comment');
document.getElementById('output').innerHTML = userComment;
这种写法肯定不安全,但除了肉眼排查,有没有工具能自动标出这类问题?或者有哪些编码规范可以规避?
除了ESLint security插件,再推荐你用一下SonarQube,它能抓到更多潜在问题。不过说实话,工具只能发现已知模式,手动检查还是少不了。
编码规范这块,记住几条:
1. 用户输入永远要转义后再展示,直接用
textContent比innerHTML安全多了2. 对于动态内容,考虑使用DOM API构建元素而不是拼接字符串
给你个安全的写法示例:
这个方法虽然麻烦点,但确实能杜绝XSS风险。开发时多注意这些细节吧,安全真不是开玩笑的。