Golang Go语言中最近撸了个go过滤xss库go-xss,发现官方库的regexp效率有待提高
Golang Go语言中最近撸了个go过滤xss库go-xss,发现官方库的regexp效率有待提高
https://github.com/feiin/go-xss 发现官方库的 regexp 效率有待提高
xss 应该在 render 的时候防范而不是 input 。
更多关于Golang Go语言中最近撸了个go过滤xss库go-xss,发现官方库的regexp效率有待提高的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
hyperscan ?
像富文本这种预先就定义好语义的,是不是在 input(source)比较好呢
看需求了 有些场景 input 就要过滤下
input 做 xss filter 是万恶之源。
何况用 regex 做 xss filter…
正确做法是用标准库的 encoding/xml,然后用 Decoder.Token 读出 token 流,然后过滤,然后用 Encoder.EncodeToken 生成文本。
用正则解析 html 是错误做法。追求性能前,先保证正确性吧。
也不是完全正则,按字符在解析的.
go 的正则库貌似不支持 ?! 语法,原因据说是因为影响效率…
是的 re2 引擎不支持
xss 在后端过滤还是在前端过滤的话题只要一开 每次都能吵起来,我是觉得后端能做的太少了,绕过的可能性也很大,前端反而有更多控制手段
哈哈哈
PHP 是世界最好的语言.
针对您提到的Go语言中官方库regexp效率问题,确实在某些场景下,正则表达式的性能可能不尽如人意。以下是一些提升regexp性能的专业建议:
- 预编译正则表达式:在程序初始化时,如果有一组固定的正则表达式需要频繁使用,可以将它们编译为Regexp对象,避免每次匹配时都重新编译,从而提高性能。
- 避免贪婪匹配:贪婪匹配可能导致回溯,降低性能。在可能的情况下,尝试使用非贪婪匹配(在量词后面添加?)。
- 使用合适的定位符:使用^和$锚点可以限制匹配发生在字符串的开始和结束位置,有助于提高性能。
- 选择合适的操作:根据需求选择合适的regexp方法,如只需找到匹配的子串位置,使用FindStringIndex会更高效。
- 减少回溯:尽量减少使用嵌套的量词、分支和反向引用等可能导致回溯的结构。
- 考虑使用第三方库:如果regexp包的性能无法满足需求,可以考虑使用第三方正则表达式库,如github.com/dlclark/regexp2,它可能提供更快的匹配速度和更多功能。
综上所述,通过上述方法可以在一定程度上提升Go语言中正则表达式的性能。希望这些建议对您有所帮助!