TL;DR
上次被 [[[[[[[[[[[[[[[[@snoopy](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy) 玩坏了,这回我随便看了看,目前 cnode 的链接仍旧不能乱点啊。
随便一测试就暴露了…
(以上链接没做坏事,只是 alert 一下而已)
@fengmk2 本帖子中的问题在提出之后就已经修复。js-xss模块原本在过滤HTML标签和属性时是基于白名单规则,但是过滤标签的属性值时还是使用了黑名单规则,在本帖提出问题之后我已经更新了代码,改为白名单规则。
@fengmk2 @leizongmin 我觉得吧,如果对 js-xss 这个项目这么自信,应该去 chromium 的项目中,为 html 加个属性叫做 no-xss='no-xss'
,比如
<div class='comment' no-xss='no-xss'></div>
,然后这个 div 里面的内容就全部不受 xss 影响。我相信每个涉及用户发言的网站都会爱上这个属性的。
xss的预防真的不是那么容易的事情,在支持 html 必要性不大的情况下,没必要开这么大一个安全口子。
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet 这个东西很难读懂的,虽然我知道 js-xss 参考了它。