beego XSRF


其實官網的介紹已經很詳細了https://beego.me/docs/mvc/controller/xsrf.md, 我這里自己做一個demo來演練一下

srf(跨站請求偽造)防護:

  • 定義:每個用戶一個cookie,所有的請求都需要驗證這個cookie,如果沒有這個cookie,則被認為跨站請求偽造。
  • 防止類型:挾制用戶在當前已登陸的web應用程序上執行非本意的操作的攻擊方法。
  • XSRF:利用的是網站對用戶網頁瀏覽器的信任。

一、開啟XSRF防護的兩種方法

// 在配置文件里添加如下三條配置
enablexsrf = true        // 開啟xsrf防護
xsrfkey = 61oEzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o          // beego默認的xsrfkey是:“beegoxsrf”,這里將key改為基於當前的key進行加密
xsrfexpire = 3600      //過期時間,默認1小時,單位秒

1.2、方法二:在main.go里beego.Run()上方開啟

// 在beego.Run()上方添加如下三行配置
beego.BConfig.WebConfig.EnableXSRF = true      // 開啟xsrf防護
beego.BConfig.WebConfig.XSRFKey = "61oEzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o"      // beego默認的xsrfkey是:“beegoxsrf”,這里將key改為基於當前的key進行加密
beego.BConfig.WebConfig.XSRFExpire = 3600       //過期時間,默認1小時,單位秒

二、開啟XSRF防護后使用post請求提交數據示例

xsrf只對post請求生效,對get請求無效,本示例是基於form表單的xsrf防護示例:

controller定義

  1. package controllers
     
    import (
        "html/template"
     
        "github.com/astaxie/beego"
    )
     
    type MainController struct {
        beego.Controller
    }
     
    func (c *MainController) Get() {
        c.Data["xsrfdata"] = template.HTML(c.XSRFFormHTML())
        c.TplName = "index.tpl"
    }
    func (c *MainController) Post() {
        c.TplName = "success.html"
    }

    2.3、模板文件中form表單使用xsrf防護

  1. <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h1>test xsrf 頁面</h1>
        <!-- form表單使用xsrf防護, 提交時不需要做特殊處理,只需要在form標簽里獲取后端傳過來的xsrf key即可 -->
        <form action="/" method="POST">
            {{.xsrfdata}}     <!-- 獲取get請求時后端傳過來的xsrf防護的key -->
            <input type="submit" value="提交">
        </form>
    </body>
    </html>

    查看網頁代碼

  發現提交頁面里自動生成了一個 name=“_xsrf” 的input標簽。

三、如何取消某一個controller的xsrf防護

開啟xsrf防護后全局的controller就都開啟了xsrf防護了,但是有個特殊的需求需要對某一個controller關閉xsrd防護該如何做那?

我們只需要對需要關閉xsrf防護的controller實現一個 ”Prepare“ 方法即可,方法的內容如下:

// Prepare 方法
func (c *XsrfController) Prepare() {
    c.EnableXSRF = false       // 關閉xsrf防護
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM