Add 0.9.1.md syntax highlighting

This commit is contained in:
vCaesar
2016-12-18 16:20:18 +08:00
parent fc9127e27e
commit 539bcc65c6

View File

@@ -49,9 +49,12 @@ CSRF的防御可以从服务端和客户端两方面着手防御效果是从
接下来我就以Go语言来举例说明如何限制对资源的访问方法
```Go
mux.Get("/user/:uid", getuser)
mux.Post("/user/:uid", modifyuser)
```
这样处理后因为我们限定了修改只能使用POST当GET方式请求时就拒绝响应所以上面图示中GET方式的CSRF攻击就可以防止了但这样就能全部解决问题了吗当然不是因为POST也是可以模拟的。
因此我们需要实施第二步在非GET方式的请求中增加随机数这个大概有三种方式来进行
@@ -62,6 +65,8 @@ CSRF的防御可以从服务端和客户端两方面着手防御效果是从
生成随机数token
```Go
h := md5.New()
io.WriteString(h, strconv.FormatInt(crutime, 10))
io.WriteString(h, "ganraomaxxxxxxxxx")
@@ -70,12 +75,17 @@ CSRF的防御可以从服务端和客户端两方面着手防御效果是从
t, _ := template.ParseFiles("login.gtpl")
t.Execute(w, token)
```
输出token
```html
<input type="hidden" name="token" value="{{.}}">
```
验证token
```Go
r.ParseForm()
token := r.Form.Get("token")
if token != "" {
@@ -83,7 +93,8 @@ CSRF的防御可以从服务端和客户端两方面着手防御效果是从
} else {
//不存在token报错
}
```
这样基本就实现了安全的POST但是也许你会说如果破解了token的算法呢按照理论上是但是实际上破解是基本不可能的因为有人曾计算过暴力破解该串大概需要2的11次方时间。
## 总结