给定一些通过接收可变数据来修改页面标题的 JavaScript
document.title = someVariable
我希望解决基于 dom 的 XSS,同时保持标题的可读性。因此,做类似escape()
或encodeURI()
不会工作的事情。
我不一定可以控制 document.title 在其他脚本中的使用方式,因此我想确保在破坏最少的情况下进行一些清理,但要避免以后处理变量的方式可能会出现的情况以这种方式解码,它后来成为 XSS。
我的第一个想法是这样的:
someVariable = someVariable.replace('<script', 'noscript');
someVariable = someVariable.replace(/[<>'"]/g, '').replace(/%3[CEce]/, '');
document.title = someVariable;
从可读性的角度来看,这具有最小的破坏性,删除这些字符可能会破坏后面的代码,但我宁愿为了安全而破坏代码。
我觉得我在这里滚动自己,所以我想知道是否有更好的方法可以满足可读性要求。如果没有,是否有任何其他过滤器或消毒推荐?