日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame高級特性-CSRF防御設(shè)置

跨站請求偽造(英語:?Cross-Site Request Forgery?),也被稱為 ?one-click attack? 或者 ?session riding?,通??s寫為 ?CSRF ?或者 ?XSRF?, 是一種挾制用戶在當前已登錄的?Web?應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。跟跨網(wǎng)站腳本(?XSS?)相比,?XSS?利用的是用戶對指定網(wǎng)站的信任,?CSRF ?利用的是網(wǎng)站對用戶網(wǎng)頁瀏覽器的信任。

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,成都網(wǎng)站制作、成都網(wǎng)站設(shè)計,塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。

如何防御

這里我們選擇通過?token?的方式對請求進行校驗,通過中間件的方式實現(xiàn),?CSRF?跨站點防御插件由社區(qū)包提供。

開發(fā)者可以通過對接口添加中間件的方式,增加?token?校驗功能。

感興趣的朋友可以閱讀插件源碼 https://github.com/GOgf/csrf

使用方式

引入插件包

import "github.com/gogf/csrf"

配置接口中間件

?csrf?插件支持自定義?csrf.Config?配置,?Config?中的?Cookie.Name?是中間件設(shè)置到請求返回?Cookie?中?token?的名稱,?ExpireTime?是?token?超時時間,?TokenLength?是?token?長度,?TokenRequestKey?是后續(xù)請求需求帶上的參數(shù)名。

s := g.Server()
s.Group("/api.v2", func(group *ghttp.RouterGroup) {
	group.Middleware(csrf.NewWithCfg(csrf.Config{
		Cookie: &http.Cookie{
			Name: "_csrf",// token name in cookie
		},
		ExpireTime:      time.Hour * 24,
		TokenLength:     32,
		TokenRequestKey: "X-Token",// use this key to read token in request param
	}))
	group.ALL("/csrf", func(r *ghttp.Request) {
		r.Response.Writeln(r.Method + ": " + r.RequestURI)
	})
})

前端對接

通過配置后,前端在?POST?請求前從?Cookie?中讀取?_csrf?的值(即?token?),然后請求發(fā)出時將?token?以?X-Token?(?TokenRequestKey?所設(shè)置)參數(shù)名置入請求中(可以是?Header?或者?Form?)即可通過?token?校驗。

代碼示例

使用默認配置

package main

import (
	"net/http"
	"time"

	"github.com/gogf/csrf"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

// default cfg
func main() {
	s := g.Server()
	s.Group("/api.v2", func(group *ghttp.RouterGroup) {
		group.Middleware(csrf.New())
		group.ALL("/csrf", func(r *ghttp.Request) {
			r.Response.Writeln(r.Method + ": " + r.RequestURI)
		})
	})
	s.SetPort(8199)
	s.Run()
}

使用自定義配置

package main

import (
	"net/http"
	"time"

	"github.com/gogf/csrf"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

// set cfg
func main() {
	s := g.Server()
	s.Group("/api.v2", func(group *ghttp.RouterGroup) {
		group.Middleware(csrf.NewWithCfg(csrf.Config{
			Cookie: &http.Cookie{
				Name: "_csrf",// token name in cookie
				Secure:   true,
				SameSite: http.SameSiteNoneMode,// 自定義samesite    
			},
			ExpireTime:      time.Hour * 24,
			TokenLength:     32,
			TokenRequestKey: "X-Token",// use this key to read token in request param
		}))
		group.ALL("/csrf", func(r *ghttp.Request) {
			r.Response.Writeln(r.Method + ": " + r.RequestURI)
		})
	})
	s.SetPort(8199)
	s.Run()
}

新聞名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame高級特性-CSRF防御設(shè)置
分享路徑:http://m.5511xx.com/article/dppegid.html