如何通过代理绕过完整性检查

时间:2019-12-04 11:02:05

标签: go proxy hugo

我有一个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静态文件的nginx网址,则可以完美加载静态文件。即使我从Nginx之外从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.

您知道如何跳过Go http代理中的这些integerity检查吗?

1 个答案:

答案 0 :(得分:0)

我已经解决了问题。 Golang代理工作正常。没有任何问题。雨果静态页面上有一些对最小化的js和css的引用,带有绝对路径,这是造成问题的原因。当请求来自golang代理时,请求来自不同的url前缀,因此css和js被破坏,因为绝对路径导致的文件不同于预期的hugo静态文件(因此完整性)失败错误)。

解决方案是在hugo配置中简单地将前缀添加为baseURL。有关更多信息,请访问:https://gohugo.io/getting-started/configuration/