前言
XSS 自动点按钮有什么危害?
在社交网络里,大多操作都是通过点击按钮发起的,例如发表留言。
假如留言系统有 XSS 漏洞,用户中招后 XSS 除了攻击之外,还能进行传播 —— 它能自动填入留言内容,并点击发表按钮,即可发出带有恶意代码的留言。好友看了中招后,又传播给他们的好友。。。从而形成蠕虫扩散。
那么,有没有一种机制,让「发表留言」必须通过用户的「真实点击」按钮才能完成,而无法通过脚本自动实现?这样就能减缓蠕虫传播速度了。
实现
这个想法听起来好像不可行:如果发表留言需要带上用户行为信息,那么 XSS 完全可以伪造一份行为数据,后端根本无法识别。
除非,用户在点击按钮时会产生一个「特殊数据」,让后端校验它。
但是,XSS 也可以直接调用按钮元素的 click 方法,这样效果和用户点击仍然一样。后端仍无法识别,是脚本点的,还是用户点的。
这么看来,我们只能保护好这个「按钮元素」,让它没法被 XSS 访问到。例如,放在一个不同源的 iframe 里,这样就和 XSS 所在的环境隔离了!