如何通过代理绕过完整性检查
How to bypass integrity checks through proxy
我有一个 Go 代理服务器,它将传入的请求代理到不同的 nginx 服务,其中部署了一堆从 hugo 生成的静态文件。 Go代理服务器代码为:
func (w http.ResponseWriter, r *http.Request) {
proxy := httputil.NewSingleHostReverseProxy(target)
proxy.Transport = debug.Transport{} // Set some Debug TCP options here
proxy.ServeHTTP(w, r)
}
debug.Transport
的创建如下:
type Transport struct {
Transport http.RoundTripper
}
func (d Transport) RoundTrip(r *http.Request) (*http.Response, error) {
fmt.Println(r.Header)
d.Transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
return d.Transport.RoundTrip(r)
}
在调试传输中,我已经忽略了 TLS 配置的证书检查。
如果我直接访问提供hugo静态文件的nginxurl,那么静态文件就完美加载了。即使我从 nginx-ingress 和 nginx 访问,静态文件也能正常使用。但是,当通过 Go 代理服务请求时,我得到一个错误:
Failed to find a valid digest in the 'integrity' attribute for resource 'https://<blah>/js/main.min.29b0315468c00226fa6f4556a9cebc0ac4fe1ce1457a01b22c0a06b329877383.js' with computed SHA-256 integrity 'Nk/s9htIgKJ5jeLFxUMWgIQGhxGZBKoEWtWEy2qYtJk='. The resource has been blocked.
知道如何跳过这些 integerity
检查 Go http 代理吗?
我找到问题了。 golang 代理工作正常。没有问题。雨果静态页面有一些对缩小的 js 和 css 的引用,以及绝对路径,这就是导致问题的原因。当请求来自 golang 代理时,它来自不同的 url 前缀,因此 css 和 js 被发现已损坏,因为绝对路径导致与 hugo 不同的文件需要静态文件(因此出现完整性失败错误)。
解决方案是简单地将前缀添加为 hugo 配置中的 baseURL
。可以在以下位置找到更多信息:https://gohugo.io/getting-started/configuration/
我有一个 Go 代理服务器,它将传入的请求代理到不同的 nginx 服务,其中部署了一堆从 hugo 生成的静态文件。 Go代理服务器代码为:
func (w http.ResponseWriter, r *http.Request) {
proxy := httputil.NewSingleHostReverseProxy(target)
proxy.Transport = debug.Transport{} // Set some Debug TCP options here
proxy.ServeHTTP(w, r)
}
debug.Transport
的创建如下:
type Transport struct {
Transport http.RoundTripper
}
func (d Transport) RoundTrip(r *http.Request) (*http.Response, error) {
fmt.Println(r.Header)
d.Transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
return d.Transport.RoundTrip(r)
}
在调试传输中,我已经忽略了 TLS 配置的证书检查。
如果我直接访问提供hugo静态文件的nginxurl,那么静态文件就完美加载了。即使我从 nginx-ingress 和 nginx 访问,静态文件也能正常使用。但是,当通过 Go 代理服务请求时,我得到一个错误:
Failed to find a valid digest in the 'integrity' attribute for resource 'https://<blah>/js/main.min.29b0315468c00226fa6f4556a9cebc0ac4fe1ce1457a01b22c0a06b329877383.js' with computed SHA-256 integrity 'Nk/s9htIgKJ5jeLFxUMWgIQGhxGZBKoEWtWEy2qYtJk='. The resource has been blocked.
知道如何跳过这些 integerity
检查 Go http 代理吗?
我找到问题了。 golang 代理工作正常。没有问题。雨果静态页面有一些对缩小的 js 和 css 的引用,以及绝对路径,这就是导致问题的原因。当请求来自 golang 代理时,它来自不同的 url 前缀,因此 css 和 js 被发现已损坏,因为绝对路径导致与 hugo 不同的文件需要静态文件(因此出现完整性失败错误)。
解决方案是简单地将前缀添加为 hugo 配置中的 baseURL
。可以在以下位置找到更多信息:https://gohugo.io/getting-started/configuration/