Skip to main content

gva gin cors

在跨域资源共享(CORS)处理中,“白名单”和“allow-all”是两种不同的策略,用于决定哪些跨域请求可以被接受。

白名单(Whitelist)

白名单策略是指只允许来自特定来源的跨域请求。这些来源被明确地列在配置文件中,只有当请求的来源匹配白名单中的某一项时,才会被接受。

优点

  • 安全性高:只允许特定来源的请求,减少了潜在的安全风险。
  • 可控性强:可以精确控制哪些来源可以访问资源。

缺点

  • 灵活性低:需要手动维护白名单,增加了管理的复杂性。
  • 可能影响用户体验:如果某些合法来源未被添加到白名单中,可能会导致合法请求被拒绝。

allow-all

allow-all 策略是指允许所有来源的跨域请求,不对请求来源进行任何限制。

优点

  • 灵活性高:允许所有来源的请求,无需手动维护白名单。
  • 用户体验好:不会因为来源问题拒绝任何请求,确保所有用户都能访问资源。

缺点

  • 安全性低:任何来源的请求都被允许,增加了潜在的安全风险。
  • 缺乏控制:无法精确控制哪些来源可以访问资源。

对比

特性白名单(Whitelist)allow-all
安全性
灵活性
可控性
管理复杂性
用户体验可能受影响

示例代码解释

在你的代码中,通过配置文件中的 Cors.Mode 来决定使用哪种策略。

allow-all 模式

if global.GVA_CONFIG.Cors.Mode == "allow-all" {
return Cors()
}

allow-all 模式下,使用 Cors() 中间件,直接放行所有跨域请求,并处理所有 OPTIONS 方法。

strict-whitelist 模式

if whitelist == nil && global.GVA_CONFIG.Cors.Mode == "strict-whitelist" && !(c.Request.Method == "GET" && c.Request.URL.Path == "/health") {
c.AbortWithStatus(http.StatusForbidden)
}

strict-whitelist 模式下,如果请求来源不在白名单中,并且请求不是对 /health 的 GET 请求,则拒绝处理请求,返回 403 Forbidden 状态码。

总结

  • 白名单:只允许特定来源的请求,安全性高,但灵活性低,需要维护白名单。
  • allow-all:允许所有来源的请求,灵活性高,但安全性低,无法精确控制访问。

根据你的需求和安全考虑,你可以选择适合的策略来处理跨域请求。