跨站请求伪造 CSRF
CSRF
用于 Fiber 的CSRF中间件,通过 cookies 传递 csrf 令牌来提供 跨站请求伪造 保护。这个 cookie 值将被用来与客户端的 csrf 令牌进行比较,除了那些被 RFC7231 定义为 "安全 "的请求(GET、HEAD、OPTIONS或TRACE/)。当 csrf 令牌无效时,该中间件将返回fiber.ErrForbidden
错误。当没有设置_csrf
cookie,或令牌已经过期时,将生成一个新的令牌并设置_csrf
cookie。
目录
签名
func New(config ...Config) fiber.Handler
示例
导入作为 Fiber 网络框架一部分的中间件包
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/csrf"
)
在你启动你的Fiber应用程序后,你可以使用以下可能性。
//初始化默认配置
app.Use(csrf.New())
//或者扩展你的配置以进行定制
app.Use(csrf.New(csrf.Config{
KeyLookup: "header:X-Csrf-Token",
CookieName: "csrf_",
CookieSameSite: "Strict",
Expiration: 1 * time.Hour,
KeyGenerator: utils.UUID,
}))
配置
// Config定义了中间件的配置。
type Config struct {
// 下一步定义了一个函数,当返回真时跳过这个中间件。
//
// 可选。默认值:nil
Next func(c *fiber.Ctx) bool
// KeyLookup是一个"<source>:<key>"形式的字符串,用于从请求中提取标记。
// 从请求中提取token。
// 可能的值。
// - "header:<name>"
// - "query:<name>"
// - "param:<name>"
// - "form:<name>"
// - "cookie:<name>"
//
// 可选。默认:"header:X-CSRF-Token"
KeyLookup string
// 会话cookie的名称。这个cookie将存储会话密钥。
// 可选。默认值为"_csrf"。
CookieName string
// CSRF cookie的域。
// 可选。默认值为""。
CookieDomain string
// CSRF cookie的路径。
// 可选。默认值为""。
CookiePath string
// 表示CSRF cookie是否安全。
// 可选。默认值为false。
CookieSecure bool
// 表示CSRF cookie是否只适用于HTTP。
// 可选。默认值为false。
CookieHTTPOnly bool
// 表示CSRF cookie是否由SameSite请求。
// 可选。默认值为 "Lax"。
CookieSameSite string
// Expiration是csrf令牌过期前的时间。
//
// 可选。默认值:1 * time.Hour
Expiration time.Duration
// 存储是用来存储中间件的状态的
//
// 可选。默认值:memory.New()
Storage fiber.Storage
// 用于将生成的CSRF令牌存储到上下文中的上下文密钥。
// 如果留空,令牌将不会被存储在上下文中。
//
// 可选。默认值:""
ContextKey string
// KeyGenerator创建一个新的CSRF令牌
//
// 可选。默认值: utils.UUID
KeyGenerator func() string
}
默认配置
var ConfigDefault = Config{
KeyLookup: "header:X-Csrf-Token",
CookieName: "csrf_",
CookieSameSite: "Lax",
Expiration: 1 * time.Hour,
KeyGenerator: utils.UUID,
}
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: