MCPcopy Index your code
hub / github.com/TruthHun/BookStack / refreshReferer

Method refreshReferer

controllers/BaseController.go:49–72  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

47}
48
49func (this *BaseController) refreshReferer() {
50 referer := this.Ctx.Request.Header.Get("referer")
51 if referer != "" {
52 referer, _ = url.QueryUnescape(referer)
53 referer = strings.ToLower(referer)
54 forbid := models.NewOption().ForbiddenReferer()
55 if len(forbid) > 0 {
56 for _, item := range forbid {
57 item = strings.ToLower(strings.TrimSpace(item))
58 // 先判断是否带有非法关键字
59 if item != "" && strings.Contains(referer, item) && !strings.HasSuffix(referer, strings.ToLower(this.Ctx.Request.RequestURI)) {
60 if u, err := url.Parse(referer); err == nil {
61 // 且referer的host与当前请求的host不是同一个,则进行302跳转以刷新过滤当前referer
62 if strings.ToLower(u.Host) != strings.ToLower(this.Ctx.Request.Host) {
63 this.Redirect(this.Ctx.Request.RequestURI, 302)
64 this.StopRun()
65 return
66 }
67 }
68 }
69 }
70 }
71 }
72}
73
74// Prepare 预处理.
75func (this *BaseController) Prepare() {

Callers 1

PrepareMethod · 0.95

Calls 2

NewOptionFunction · 0.92
ForbiddenRefererMethod · 0.80

Tested by

no test coverage detected