Uncategorized

Cài đặt CSRF gofilber

Khởi tạo cấu hình mặc định

app.Use(csrf.New())

Hoặc cấu hình tùy chỉnh

app.Use(csrf.New(csrf.Config{
    KeyLookup:      "header:X-Csrf-Token",
    CookieName:     "csrf_",
    CookieSameSite: "Lax",
    Expiration:     1 * time.Hour,
    KeyGenerator:   utils.UUIDv4,
}))

KeyLookup là một chuỗi ở dạng “<source>:<key>” được sử dụng để tạo Trình trích xuất trích xuất mã thông báo từ yêu cầu. Các giá trị có thể có: “header:<name>”, “query:<name>”, “param:<name>”, “form:<name>”, “cookie:<name>”.

Trong một số trường hợp bạn không muốn sử dụng csrf để kiểm tra như khi tạo routes api, hoặc submid form, nếu cấu hình như trên bạn chỉ có thể gọi đến routes khi http request bao gồm header csrf token, còn các trường hợp khác sẽ gặp lỗi 403 Forbidden.

Để có thể cấu hình csrf cả header và form có thể xử lí như sau trong app.go :

csrfMiddlewareForm := csrf.New(csrf.Config{
	KeyLookup:      "form:csrf_token",
	CookieName:     "csrf_token",
	CookieSameSite: "Lax",
	Expiration:     1 * time.Hour,
	ContextKey:     "csrf",
})

csrfMiddlewareHeader := csrf.New(csrf.Config{
	KeyLookup:      "header:X-Csrf-Token",
	CookieName:     "csrf_token",
	CookieSameSite: "Lax",
	Expiration:     1 * time.Hour,
	ContextKey:     "csrf",
})

app.Use(func(c *fiber.Ctx) error {
	if strings.HasPrefix(c.Path(), "/api") {
		return c.Next()
	} else if c.Get("X-Requested-With") == "XMLHttpRequest" {
		return csrfMiddlewareHeader(c)
	}
	return csrfMiddlewareForm(c)
})

trong app.Use trên sẽ kiểm tra routes đang được gọi để kiểm tra csrf:

  • Trường hợp routes chứa “/api” sẽ bỏ qua kiểm tra csrf
  • Trường hợp request là Http Request sẽ kiểm tra csrf header:X-Csrf-Token
  • Trường hợp còn lại sẽ kiểm tra form:csrf_token

Trên đây chỉ là một ví dụ cơ bản, tùy vào trường hợp sử dụng khác nhau bạn có thể thay đổi cho phù hợp với dự án.

About Bùi Minh Vương