安全RCE之未授权访问分析(19)

2023-05-02 来源:飞速影视
以上代码中newRequest()用于组装请求头,跟进如下:
func (api *API) newRequest(r *http.Request, suffix string) (*http.Request, error) { authReq := &http.Request{ Method: r.Method, URL: rebaseUrl(r.URL, api.URL, suffix), Header: helper.HeaderClone(r.Header), }...}
doRequestWithoutRedirects()用于发起请求,跟进如下:
func (api *API) doRequestWithoutRedirects(authReq *http.Request) (*http.Response, error) { signingTripper := secret.NewRoundTripper(api.Client.Transport, api.Version) return signingTripper.RoundTrip(authReq)}
第一行实例化使用一个RoundTripper,传入了http.Client的Transport类型。是一个接口,可以当做是基于http.Client的中间件,在每次请求之前做一些指定操作。实现其中的RoundTrip方法即可实现接口做一些请求前的操作。下面看看在方法中做了什么
func (r *roundTripper) RoundTrip(req *http.Request) (*http.Response, error) { //生成JWT令牌 tokenString, err := JWTTokenString(DefaultClaims) ... // Set a custom header for the request. This can be used in some // configurations (Passenger) to solve auth request routing problems. //设置Header头 req.Header.Set("Gitlab-Workhorse", r.version) req.Header.Set("Gitlab-Workhorse-Api-Request", tokenString) return r.next.RoundTrip(req)}
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号