## 防護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容易犯的錯
- 字符串操作