今天被测试发了一个 xss 漏洞,之前明明做过 xss 过滤的,很纳闷的看了一下

154 天前
 Forviler

之前做过 xss 过滤 用的 js-xss

之前测试也都是正常的

今天看到他的测试内容: < img/src=1 onerror='top.onerror=alert; throw 2'>

看到这个 “/” 好像明白了什么, 不过为什么这种也会被浏览器识别成 img 标签 很纳闷

然后去看 js-xss 的 issues 发现了好像一样的 https://github.com/leizongmin/js-xss/issues/283

这么久也没回复,而且 js-xss 好像是不是也不维护了

虽然用其中的 onIgnoreTag 在其中做了标签名中是否有 “/” 然后去掉 “/” 后再调用 xss 函数 但是不知道还有没有类似的问题出现;

想问一下有没有别的好用的 xss 过滤办法

4160 次点击
所在节点    JavaScript
41 条回复
jowan
154 天前
现在的浏览器不是上古的 IE 很多编写的缺陷和 BUG 会被它们主动修复 比如你缺少关闭标签 或者属性值拼写错误 它们都是尽量去帮你修复 有时候在控制台会给你一些 warning 实在修复不了 会直接给你报错
jowan
154 天前
就比如说 chrome 你输入网址的时候 xxx.com 的点写成了句号 它都会帮你转换成英文的
InDom
154 天前
如果你不是富文本的话,其实直接用 innerText 而非 innerHTML 就可以避免。

至于框架,也有框架也有类似的安全方法。从原理上就杜绝了这种问题的发生。

如果你真的有富文本的需求,那么我一般是这么做的

禁止 script 与 on[a-zA-Z] 的出现,或者把 script on 替换为 scr-ipt on-.

宁错杀,不放过。
Forviler
154 天前
@jowan 所以 ‘/’ 是在修复之列的, 我试了几个别的都不行,这种不同浏览器还有不同的修复方案了,希望没有别的了
tabris17
154 天前
甚至不同浏览器对于不规范 HTML Tag 处理方式还不一样,扯得很。最好的办法就是保存时服务端做一次 html 解析,规范化后保存
jowan
154 天前
@jowan TMD 楼下的朋友不要点击上面我发的那个示例网址 我草我在办公室 27 寸的显示屏打开了 尴尬
Forviler
154 天前
@InDom 确实是需要富文本,不然 innerText 完全不会有这种问题; 干掉 on[a-zA-Z] 和 script 确实一劳永逸;这项目是个老项目了,不想动太多; 下个项目要这样搞一下
xenme
154 天前
@jowan 😄,说明这域名可以
Forviler
154 天前
@tabris17 后端大佬使唤不动
Forviler
154 天前
@jowan ....好奇心害死猫,还好我手快,随便拼个网址竟然是这。。。。
yumusb
154 天前
XSS 粗暴一点的话。直接过滤掉 引号与尖号。
lneoi
154 天前
Forviler
154 天前
@yumusb 你这有点过分,过滤完只剩标签了
zsh2517
154 天前
@jowan 我印象好像确实有规范要求这么干的,把中文句号换成点继续访问,不是浏览器自作主张的本土化/兼容。

刚才问 GPT + 翻了一下 RFC ,RFC 3490 里面确实规定了好几种分隔符

> 当使用点作为标签分隔符时,必须将以下字符识别为点:U+002E (句号)、U+3002 (表意句号)、U+FF0E (全幅句号)、U+FF61 (半幅表意句号)。

英文文档: https://datatracker.ietf.org/doc/html/rfc3490#section-3.1
中文翻译: https://rfc2cn.com/rfc3490.html 3.1 部分
zjp
154 天前
jowan
154 天前
@zsh2517 但是很早之前的版本会跳到浏览器设置的搜索引擎进行内容搜索 不知道是哪个版本更新的
a632079
154 天前
mark. 我现在项目用的都是 xss 0 0 ,图方便。看来得换了。感谢楼主预警。
BaiLinfeng
154 天前
表示从来都没使用过啊
Puteulanus
154 天前
本来记得有个新出的 HTML Sanitizer API ,看了下浏览器兼容,可以当它没有了。。
dawn009
154 天前
浏览器对不合规范的写法做了太多妥协,不要信任。
可以用 javascript 写一个简易的 HTML parser ,自己控制解析哪些 tag 、怎样解析。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/998110

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX