go html/template:自1.21.1版本起,对带有CDATA标签的script元素的解析不正确,

t2a7ltrp  于 6个月前  发布在  Go
关注(0)|答案(1)|浏览(45)

你正在使用哪个版本的Go( go version )?

$ go version
go version go1.21.1 darwin/arm64

这个问题在最新版本中是否会重现?

是的,它确实会。脚本在使用go1.21.0时可以正确解析。

你正在使用什么操作系统和处理器架构( go env )?

go env 输出

$ go env
GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users//Library/Caches/go-build'
GOENV='/Users//Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users//go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users//go'
GOPRIVATE=''
GOPROXY=''
GOROOT='/opt/homebrew/Cellar/go/1.21.2/libexec'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/opt/homebrew/Cellar/go/1.21.2/libexec/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.21.2'
GCCGO='gccgo'
AR='ar'
CC='cc'
CXX='c++'
CGO_ENABLED='1'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/7n/55m6c9j15c561rfd89pfj5_r0000gn/T/go-build2874079816=/tmp/go-build -gno-record-gcc-switches -fno-common'

你做了什么?

我有一个Golang服务,用于解析由npm/gulp后端实时生成的模板。在node端使用的其中一个包是browsersync,它将一个脚本注入到页面的body顶部。这个脚本被封装在CDATA标签中。
一个简单的复现在这里: https://go.dev/play/p/zDDuftHipgG
这个问题似乎是由这个提交引起的: bbd043f
并且与这个安全问题有关: #62197
提交作者提到这个更改将破坏一些合法的代码,但我认为破坏CDATA标签是一个足够严重的问题,不应该被忽视。

你期望看到什么?

模板解析和执行正确。

你看到了什么?

执行失败,错误为:

html/template:temp: ends in a non-text context: {stateJS delimNone urlPartNone jsCtxRegexp attrNone elementScript <nil>}

相关问题