## 防护XSRF的方式:post请求之类伪造请求
* #### 每一个用户一个cookie,所用的请求都需要验证这个cookie,如果没有这个cookie,则被认为跨站请求伪造
* #### 挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法
* #### CSRF 利用的是网站对用户网页浏览器的信任
## beego自带的防范机制:
* #### 配置文件配置:
* ~~~
enablexsrf = true
xsrfkey = 61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o
xsrfexpire = 3600 //过期时间,默认1小时,单位秒
~~~
* #### main.go文件的run前面:
* ~~~
beego.BConfig.WebConfig.EnableXSRF = true
beego.BConfig.WebConfig.XSRFKey = "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o"
beego.BConfig.WebConfig.XSRFExpire = 360
~~~
* #### 函数中设置xsrf数据:得在渲染模板的Get方法里面设置数据:
~~~
import "html/template"
func (c *UserController) Get() {
c.Data["xsrfdata"]=template.HTML(c.XSRFFormHTML())
c.TplName = "user.html"
}
~~~
~~~
func (c *UserController) Post() {
c.TplName = "index.tpl"
}
~~~
* 函数中重新设置过期时间:
~~~
this.XSRFExpire = 7200
this.Data["xsrfdata"]=template.HTML(this.XSRFFormHTML())
~~~
* 模板中使用:
~~~
<form action="/user" method="post">
{{ .xsrfdata }}
<input type="submit" value="提交"/>
</form>
~~~
* #### ajax中使用:添加 \_xsrf 参数,需要两个插件
#### jQuery cookie插件:[https://github.com/carhartl/jquery-cookie](https://github.com/carhartl/jquery-cookie)
#### base64 插件:[http://phpjs.org/functions/base64\_decode/](http://phpjs.org/functions/base64_decode/)
~~~
var xsrf, xsrflist;
xsrf = $.cookie("_xsrf");
xsrflist = xsrf.split("|");
args._xsrf = base64_decode(xsrflist[0]);
args就是要提交的数据
~~~
## 支持controller级别的屏蔽:不让xsrf在这个控制器中生效,就要重写此控制器的Prepare方法。
### **此处的Prepare不能写错或写别的方法。**
* #### 只需要在需要屏蔽的controller中的Prepare方法中设置为false即可:
~~~
// Prepare方法实在init后,请求方法前执行的
func (c *UploadController) Prepare() {
c.EnableXSRF = false
}
~~~
- go环境搭建
- 解决go get网络慢的问题
- beego的安装
- bee的安装
- 编辑器
- go module
- 配置文件详解
- 配置文件其他说明
- 路由方法
- 路由
- 数据校验
- 校验函数
- 页面跳转
- 获取前端数据
- json文件的获取
- xsrf的用法
- xsrf的防护
- srfs和json的搭配
- flash的用法
- 过滤器
- url反转
- 各类数据的处理
- 模板函数
- 内置模板函数
- 自定义模板函数
- 模板
- 模板处理
- 模板渲染
- 视图文件的处理
- 静态文件
- 请求方式判断
- 验证码
- 另一种方法
- 分页类
- session
- 登录判断
- orm模块
- 使用方法
- mysql的安装
- 安装orm及驱动
- 建立模型
- 自定义模型
- 增删改查
- 高级查询
- 常见问题汇总
- 代码收藏
- 打包部署
- go build打包
- utils收藏
- 新goer容易犯的错
- 字符串操作