diff --git a/zh/09.1.md b/zh/09.1.md index cf09f470..ccec5872 100644 --- a/zh/09.1.md +++ b/zh/09.1.md @@ -51,8 +51,8 @@ CSRF的防御可以从服务端和客户端两方面着手,防御效果是从 ```Go - mux.Get("/user/:uid", getuser) - mux.Post("/user/:uid", modifyuser) +mux.Get("/user/:uid", getuser) +mux.Post("/user/:uid", modifyuser) ``` 这样处理后,因为我们限定了修改只能使用POST,当GET方式请求时就拒绝响应,所以上面图示中GET方式的CSRF攻击就可以防止了,但这样就能全部解决问题了吗?当然不是,因为POST也是可以模拟的。 @@ -67,33 +67,33 @@ CSRF的防御可以从服务端和客户端两方面着手,防御效果是从 ```Go - h := md5.New() - io.WriteString(h, strconv.FormatInt(crutime, 10)) - io.WriteString(h, "ganraomaxxxxxxxxx") - token := fmt.Sprintf("%x", h.Sum(nil)) +h := md5.New() +io.WriteString(h, strconv.FormatInt(crutime, 10)) +io.WriteString(h, "ganraomaxxxxxxxxx") +token := fmt.Sprintf("%x", h.Sum(nil)) - t, _ := template.ParseFiles("login.gtpl") - t.Execute(w, token) +t, _ := template.ParseFiles("login.gtpl") +t.Execute(w, token) ``` 输出token ```html - + ``` 验证token ```Go - r.ParseForm() - token := r.Form.Get("token") - if token != "" { - //验证token的合法性 - } else { - //不存在token报错 - } - +r.ParseForm() +token := r.Form.Get("token") +if token != "" { + //验证token的合法性 +} else { + //不存在token报错 +} + ``` 这样基本就实现了安全的POST,但是也许你会说如果破解了token的算法呢,按照理论上是,但是实际上破解是基本不可能的,因为有人曾计算过,暴力破解该串大概需要2的11次方时间。