日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

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

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

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

如何防御

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

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

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

使用方式

引入插件包

import "github.com/gogf/csrf"

配置接口中間件

?csrf?插件支持自定義?csrf.Config?配置,?Config?中的?Cookie.Name?是中間件設(shè)置到請(qǐng)求返回?Cookie?中?token?的名稱,?ExpireTime?是?token?超時(shí)時(shí)間,?TokenLength?是?token?長(zhǎng)度,?TokenRequestKey?是后續(xù)請(qǐng)求需求帶上的參數(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)
	})
})

前端對(duì)接

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

代碼示例

使用默認(rèn)配置

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()
}

分享標(biāo)題:創(chuàng)新互聯(lián)GoFrame教程:GoFrame高級(jí)特性-CSRF防御設(shè)置
標(biāo)題來源:http://www.dlmjj.cn/article/dppegid.html