大家好,我们劳动节放假期间,Go 官方又发布新版本了。这次的版本更新依然是安全更新,同样是两个版本:Go1.20.4 和 Go1.19.9。主要包含 3 个安全更新,都是 html/template 包的。
- html/template: CSS 值的不正确清理
插入 CSS 上下文时,尖括号 (<>) 不被视为危险字符。如果使用不受信任的输入执行,包含由 “/” 字符分隔的多个操作的模板可能会导致意外关闭 CSS 上下文并允许注入意外的 HMTL。
issue 详见:<https://go.dev/issue/59720>
- html/template: JavaScript 空格处理不当
并非所有有效的 JavaScript 空白字符都被视为空白。在还包含操作的 JavaScript 上下文中,包含字符集“\t\n\f\r\u0020\u2028\u2029”之外的空白字符的模板在执行期间可能无法正确清理。
issue 详见:<https://go.dev/issue/59721>
- html/template: 对空 HTML 属性的不当处理
由于 HTML 规范化规则,使用空输入执行的未加引号的 HTML 属性(例如“attr={{.}}”)中包含操作的模板可能会导致在解析时产生意外结果的输出。这可能允许将任意属性注入到标签中。
issue 详见:<https://go.dev/issue/59722>
如果你使用了 html/template 包,建议进行升级。
可以使用官方推荐的方式升级,也可以用你喜欢的方式升级,亦或到 Go语言中文网 <https://studygolang.com/dl> 下载最新的包。
有啥奇怪的,debug的时候默认禁用优化内联。</br>
以下来自于`github.com/go-delve/delve/pkg/gobuild/gobuild.go`</br>
```go
func goBuildArgs(debugname string, pkgs []string, buildflags string, isTest bool) []string {
args := []string{"-o", debugname}
if isTest {
args = append([]string{"-c"}, args...)
}
args = append(args, "-gcflags", "all=-N -l")
if buildflags != "" {
args = append(args, config.SplitQuotedFields(buildflags, '\'')...)
}
args = append(args, pkgs...)
return args
}
```
#4
更多评论
https://github.com/golang/go/issues/59572
修复这个bug才是重点额,感觉容易写出自我怀疑的bug,结果是go官方bug。
#2