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

2023-12-06 16:33:28 +08:00
 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 过滤办法

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

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

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

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

宁错杀,不放过。
Forviler
2023-12-06 16:48:50 +08:00
@jowan 所以 ‘/’ 是在修复之列的, 我试了几个别的都不行,这种不同浏览器还有不同的修复方案了,希望没有别的了
tabris17
2023-12-06 16:49:44 +08:00
甚至不同浏览器对于不规范 HTML Tag 处理方式还不一样,扯得很。最好的办法就是保存时服务端做一次 html 解析,规范化后保存
jowan
2023-12-06 16:50:37 +08:00
@jowan TMD 楼下的朋友不要点击上面我发的那个示例网址 我草我在办公室 27 寸的显示屏打开了 尴尬
Forviler
2023-12-06 16:52:44 +08:00
@InDom 确实是需要富文本,不然 innerText 完全不会有这种问题; 干掉 on[a-zA-Z] 和 script 确实一劳永逸;这项目是个老项目了,不想动太多; 下个项目要这样搞一下
xenme
2023-12-06 16:53:51 +08:00
@jowan 😄,说明这域名可以
Forviler
2023-12-06 16:54:13 +08:00
@tabris17 后端大佬使唤不动
Forviler
2023-12-06 16:55:59 +08:00
@jowan ....好奇心害死猫,还好我手快,随便拼个网址竟然是这。。。。
yumusb
2023-12-06 16:59:29 +08:00
XSS 粗暴一点的话。直接过滤掉 引号与尖号。
lneoi
2023-12-06 17:11:08 +08:00
Forviler
2023-12-06 17:36:34 +08:00
@yumusb 你这有点过分,过滤完只剩标签了
zsh2517
2023-12-06 20:00:13 +08:00
@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
2023-12-06 20:04:47 +08:00
jowan
2023-12-06 20:46:02 +08:00
@zsh2517 但是很早之前的版本会跳到浏览器设置的搜索引擎进行内容搜索 不知道是哪个版本更新的
a632079
2023-12-06 20:57:45 +08:00
mark. 我现在项目用的都是 xss 0 0 ,图方便。看来得换了。感谢楼主预警。
BaiLinfeng
2023-12-06 22:12:19 +08:00
表示从来都没使用过啊
Puteulanus
2023-12-06 22:15:29 +08:00
本来记得有个新出的 HTML Sanitizer API ,看了下浏览器兼容,可以当它没有了。。
dawn009
2023-12-07 01:58:00 +08:00
浏览器对不合规范的写法做了太多妥协,不要信任。
可以用 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