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

2023-05-02 来源:飞速影视
上方代码中手动声明了两个结构体和,实现了handler接口的方法。在ListenAndServe中通过传入结构体变量嵌套绑定了这两个中间件。
当收到请求时会首先调用中的方法进行日志打印,其后调用中的方法进行权限认证,最后匹配路由/user,调用转换好的handler处理器返回JSON数据,如下图。

安全RCE之未授权访问分析


当权限认证失败会返回401状态码。

安全RCE之未授权访问分析


写法二
package mainimport ( "log" "net/http" "time" "encoding/json")//返回信息type Company struct { ID int Name string Country string}//权限认证中间件func AuthHandler(next http.Handler) http.Handler { //这里使用HandlerFunc将函数包装成了httpHandler并返回给LogHandler的next return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){ //如果没有嵌套中间件则使用默认的DefaultServeMux if next == nil { next = http.DefaultServeMux } //判断Authorization头是否不为空 auth := r.Header.Get("Authorization") if auth != "" { next.ServeHTTP(w, r) }else{ //返回401 w.WriteHeader(http.StatusUnauthorized) } })}//日志请求中间件func LogHandler(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){ if next == nil { next = http.DefaultServeMux } start := time.Now() //打印请求路径 log.Printf("Started %s %s", r.Method, r.URL.Path) //调用嵌套的中间件,这里为AuthMiddleware next.ServeHTTP(w, r) //打印请求耗时 log.Printf("Comleted %s in %v", r.URL.Path, time.Since(start)) })}func main() { //注册路由 http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { //实例化结构体返回json格式数据 c := &Company{ ID:123, Name:"TopSec", Country: "CN", } enc := json.NewEncoder(w) enc.Encode(c) }) //监听端口绑定自定义中间件 http.ListenAndServe(":8000",LogHandler(AuthHandler(nil)))}
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

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