-
Notifications
You must be signed in to change notification settings - Fork 509
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rust wasm plugin painc #1280
Comments
header里包含非ascii字符符合http协议标准么 |
go的string应该也是只支持utf8的把, @CH3CHO 确认下header里有乱码的话go的plugin 是怎么处理的,可以统一一下 |
对的,的确不符合 http 协议规范,正常的 header 头也不会出现这个问题,这次出问题的 header 是 cookie, 生产环境有些老业务逻辑对 cookie 有些不太好的实践导致的。 |
临时处理可以在自己插件里重写 |
嗯,我自己的问题已经解决了,zty 让我来提个 issue |
@jaymie9019 我建议用方案2,但是对于过滤掉的header应该打warning日志 |
@jaymie9019 可以给 rust sdk 提个PR 哈,也建议给 proxy wasm上游社区提 |
上游提供了 |
ok~ |
If you are reporting any crash or any potential security issue, do not
open an issue in this repo. Please report the issue via ASRC(Alibaba Security Response Center) where the issue will be triaged appropriately.
Ⅰ. Issue Description
自行开发了一个基于 higress rust wasm 的 sdk 的插件在生产环境遇到了 panic,
Ⅱ. Describe what happened
截图中可以可以看到
当然这不是一个必现的问题,只有一些特殊的 case 才会遇到,最后我排查到的问题
在
https://github.com/alibaba/higress/blob/main/plugins/wasm-rust/src/plugin_wrapper.rs
文件中的一行代码在这行代码中,底层调用了
hostcalls.rs
中的这个方法这行代码
String::from_utf8(value).unwrap(),
发生了 panic, 原因是有些特殊的 header 头的值无法被转成 utf8 格式的字符串,产生 error,所以 unwrap 就直接 panic。 我排查的思路是找到这个 header,然后打印出 traceId, 然后再去 access-log 中打开某个请求头的日志打印,再用 traceId 查询看下到底长什么样子。 这里给下截图,我把对应的头找到并且打印了出来这里给两个方案
方案1,使用
String::from_utf8_lossy
方案2
方案2更安全一些,但是丢弃了部分 header。这里更偏向于方案 1
The text was updated successfully, but these errors were encountered: