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次方时间。