Golang Go语言中最近撸了个go过滤xss库go-xss,发现官方库的regexp效率有待提高

发布于 1周前 作者 zlyuanteng 来自 Go语言

Golang Go语言中最近撸了个go过滤xss库go-xss,发现官方库的regexp效率有待提高
https://github.com/feiin/go-xss 发现官方库的 regexp 效率有待提高

12 回复

xss 应该在 render 的时候防范而不是 input 。

更多关于Golang Go语言中最近撸了个go过滤xss库go-xss,发现官方库的regexp效率有待提高的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


像富文本这种预先就定义好语义的,是不是在 input(source)比较好呢

看需求了 有些场景 input 就要过滤下

input 做 xss filter 是万恶之源。

何况用 regex 做 xss filter…

正确做法是用标准库的 encoding/xml,然后用 Decoder.Token 读出 token 流,然后过滤,然后用 Encoder.EncodeToken 生成文本。
用正则解析 html 是错误做法。追求性能前,先保证正确性吧。

也不是完全正则,按字符在解析的.

go 的正则库貌似不支持 ?! 语法,原因据说是因为影响效率…

是的 re2 引擎不支持

xss 在后端过滤还是在前端过滤的话题只要一开 每次都能吵起来,我是觉得后端能做的太少了,绕过的可能性也很大,前端反而有更多控制手段

哈哈哈
PHP 是世界最好的语言.

针对您提到的Go语言中官方库regexp效率问题,确实在某些场景下,正则表达式的性能可能不尽如人意。以下是一些提升regexp性能的专业建议:

  1. 预编译正则表达式:在程序初始化时,如果有一组固定的正则表达式需要频繁使用,可以将它们编译为Regexp对象,避免每次匹配时都重新编译,从而提高性能。
  2. 避免贪婪匹配:贪婪匹配可能导致回溯,降低性能。在可能的情况下,尝试使用非贪婪匹配(在量词后面添加?)。
  3. 使用合适的定位符:使用^和$锚点可以限制匹配发生在字符串的开始和结束位置,有助于提高性能。
  4. 选择合适的操作:根据需求选择合适的regexp方法,如只需找到匹配的子串位置,使用FindStringIndex会更高效。
  5. 减少回溯:尽量减少使用嵌套的量词、分支和反向引用等可能导致回溯的结构。
  6. 考虑使用第三方库:如果regexp包的性能无法满足需求,可以考虑使用第三方正则表达式库,如github.com/dlclark/regexp2,它可能提供更快的匹配速度和更多功能。

综上所述,通过上述方法可以在一定程度上提升Go语言中正则表达式的性能。希望这些建议对您有所帮助!

回到顶部