【问题标题】:How to bypass integrity checks through proxy如何通过代理绕过完整性检查
【发布时间】:2019-12-04 11:02:05
【问题描述】:

我有一个 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 url,那么静态文件就完美加载了。即使我从 nginx 之外的 nginx-ingress 访问,静态文件也可以正常提供。但是,当请求通过 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 代理吗?

【问题讨论】:

  • 您在哪里看到该错误?在您的浏览器中?
  • 假设此错误出现在您的浏览器中,这似乎很可能,不,没有办法禁用它。但无论如何你不应该需要或想要。正确的解决方案是确保您没有修改传输中的数据。完整性检查失败的事实意味着某些内容没有正确传输。
  • 对于来自提供数据的 nginx 的响应,绝对没有做任何事情。整个代码就是我上面所做的。如果我直接在浏览器中访问 nginx url,没有响应,但是当它通过 golang 代理访问时,就会发生这种情况。
  • If I visit the nginx url directly in my browser, there is no "error" response 我的意思是上面
  • 你没有真正回答我的问题。但听起来我的假设是正确的:您的 Go 代理正在以某种方式修改有效负载。

标签: go proxy hugo


【解决方案1】:

我已经找到了问题所在。 golang 代理运行良好。没有问题。 hugo 静态页面有一些对缩小的 js 和 css 的引用,带有绝对路径,这导致了问题。当请求来自 golang 代理时,它来自不同的 url 前缀,因此发现 css 和 js 已损坏,因为绝对路径导致的文件与预期的一个 hugo 静态文件不同(因此完整性失败错误)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    相关资源
    最近更新 更多