• 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防护
    }
  • 相关阅读:
    SQL随机排序
    根据经纬度获取所在城市的相关信息以及根据地点城市获取经纬度
    百度收集自动推送脚本——python版
    采集(未测试)
    网页代码测试工具(很有用)
    微信红包源码2020年最新版(完整测试版)
    mvc返回多个结果集,返回多个视图
    计算工龄(mssql标量值函数)
    YZMCMS发布问题以及解决方法
    用输出的方式向页面和js增加引入
  • 原文地址:https://www.cnblogs.com/majiang/p/14163599.html
Copyright © 2020-2023  润新知