mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-06 18:10:26 +08:00
部分WAF动作输出内容时增加自定义报头
This commit is contained in:
@@ -134,6 +134,7 @@ func (this *CaptchaAction) Perform(waf *WAF, group *RuleGroup, set *RuleSet, req
|
|||||||
// 占用一次失败次数
|
// 占用一次失败次数
|
||||||
CaptchaIncreaseFails(req, this, waf.Id, group.Id, set.Id, CaptchaPageCodeInit)
|
CaptchaIncreaseFails(req, this, waf.Id, group.Id, set.Id, CaptchaPageCodeInit)
|
||||||
|
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusTemporaryRedirect)
|
||||||
http.Redirect(writer, req.WAFRaw(), CaptchaPath+"?info="+url.QueryEscape(info), http.StatusTemporaryRedirect)
|
http.Redirect(writer, req.WAFRaw(), CaptchaPath+"?info="+url.QueryEscape(info), http.StatusTemporaryRedirect)
|
||||||
|
|
||||||
return false, false
|
return false, false
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ func (this *Get302Action) Perform(waf *WAF, group *RuleGroup, set *RuleSet, requ
|
|||||||
return true, false
|
return true, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
request.ProcessResponseHeaders(writer.Header(), http.StatusFound)
|
||||||
http.Redirect(writer, request.WAFRaw(), Get302Path+"?info="+url.QueryEscape(info), http.StatusFound)
|
http.Redirect(writer, request.WAFRaw(), Get302Path+"?info="+url.QueryEscape(info), http.StatusFound)
|
||||||
|
|
||||||
flusher, ok := writer.(http.Flusher)
|
flusher, ok := writer.(http.Flusher)
|
||||||
|
|||||||
@@ -75,14 +75,15 @@ func (this *JSCookieAction) Perform(waf *WAF, group *RuleGroup, set *RuleSet, re
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusOK)
|
||||||
|
|
||||||
writer.Header().Set("Content-Type", "text/html; charset=utf-8")
|
writer.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
writer.Header().Set("Cache-Control", "no-cache")
|
writer.Header().Set("Cache-Control", "no-cache")
|
||||||
|
|
||||||
var timestamp = types.String(time.Now().Unix())
|
var timestamp = types.String(time.Now().Unix())
|
||||||
|
|
||||||
var cookieValue = timestamp + "@" + types.String(set.Id) + "@" + fmt.Sprintf("%x", md5.Sum([]byte(timestamp+"@"+types.String(set.Id)+"@"+nodeConfig.NodeId)))
|
var cookieValue = timestamp + "@" + types.String(set.Id) + "@" + fmt.Sprintf("%x", md5.Sum([]byte(timestamp+"@"+types.String(set.Id)+"@"+nodeConfig.NodeId)))
|
||||||
|
var respHTML = `<!DOCTYPE html>
|
||||||
_, _ = writer.Write([]byte(`<!DOCTYPE html>
|
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title></title>
|
<title></title>
|
||||||
@@ -94,7 +95,10 @@ window.location.reload();
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
</body>
|
</body>
|
||||||
</html>`))
|
</html>`
|
||||||
|
writer.Header().Set("Content-Length", types.String(len(respHTML)))
|
||||||
|
writer.WriteHeader(http.StatusOK)
|
||||||
|
_, _ = writer.Write([]byte(respHTML))
|
||||||
|
|
||||||
// 记录失败次数
|
// 记录失败次数
|
||||||
this.increaseFails(req, waf.Id, group.Id, set.Id)
|
this.increaseFails(req, waf.Id, group.Id, set.Id)
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ func (this *Post307Action) Perform(waf *WAF, group *RuleGroup, set *RuleSet, req
|
|||||||
Value: info,
|
Value: info,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
request.ProcessResponseHeaders(writer.Header(), http.StatusTemporaryRedirect)
|
||||||
http.Redirect(writer, request.WAFRaw(), request.WAFRaw().URL.String(), http.StatusTemporaryRedirect)
|
http.Redirect(writer, request.WAFRaw(), request.WAFRaw().URL.String(), http.StatusTemporaryRedirect)
|
||||||
|
|
||||||
flusher, ok := writer.(http.Flusher)
|
flusher, ok := writer.(http.Flusher)
|
||||||
|
|||||||
@@ -33,12 +33,15 @@ func (this *CaptchaValidator) Run(req requests.Request, writer http.ResponseWrit
|
|||||||
}
|
}
|
||||||
m, err := utils.SimpleDecryptMap(info)
|
m, err := utils.SimpleDecryptMap(info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusBadRequest)
|
||||||
|
writer.WriteHeader(http.StatusBadRequest)
|
||||||
_, _ = writer.Write([]byte("invalid request"))
|
_, _ = writer.Write([]byte("invalid request"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var timestamp = m.GetInt64("timestamp")
|
var timestamp = m.GetInt64("timestamp")
|
||||||
if timestamp < time.Now().Unix()-600 { // 10分钟之后信息过期
|
if timestamp < time.Now().Unix()-600 { // 10分钟之后信息过期
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusTemporaryRedirect)
|
||||||
http.Redirect(writer, req.WAFRaw(), m.GetString("url"), http.StatusTemporaryRedirect)
|
http.Redirect(writer, req.WAFRaw(), m.GetString("url"), http.StatusTemporaryRedirect)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -51,16 +54,19 @@ func (this *CaptchaValidator) Run(req requests.Request, writer http.ResponseWrit
|
|||||||
|
|
||||||
var waf = SharedWAFManager.FindWAF(policyId)
|
var waf = SharedWAFManager.FindWAF(policyId)
|
||||||
if waf == nil {
|
if waf == nil {
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusTemporaryRedirect)
|
||||||
http.Redirect(writer, req.WAFRaw(), originURL, http.StatusTemporaryRedirect)
|
http.Redirect(writer, req.WAFRaw(), originURL, http.StatusTemporaryRedirect)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var actionConfig = waf.FindAction(actionId)
|
var actionConfig = waf.FindAction(actionId)
|
||||||
if actionConfig == nil {
|
if actionConfig == nil {
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusTemporaryRedirect)
|
||||||
http.Redirect(writer, req.WAFRaw(), originURL, http.StatusTemporaryRedirect)
|
http.Redirect(writer, req.WAFRaw(), originURL, http.StatusTemporaryRedirect)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
captchaActionConfig, ok := actionConfig.(*CaptchaAction)
|
captchaActionConfig, ok := actionConfig.(*CaptchaAction)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusTemporaryRedirect)
|
||||||
http.Redirect(writer, req.WAFRaw(), originURL, http.StatusTemporaryRedirect)
|
http.Redirect(writer, req.WAFRaw(), originURL, http.StatusTemporaryRedirect)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -232,6 +238,7 @@ func (this *CaptchaValidator) validate(actionConfig *CaptchaAction, policyId int
|
|||||||
// 加入到白名单
|
// 加入到白名单
|
||||||
SharedIPWhiteList.RecordIP("set:"+strconv.FormatInt(setId, 10), actionConfig.Scope, req.WAFServerId(), req.WAFRemoteIP(), time.Now().Unix()+int64(life), policyId, false, groupId, setId, "")
|
SharedIPWhiteList.RecordIP("set:"+strconv.FormatInt(setId, 10), actionConfig.Scope, req.WAFServerId(), req.WAFRemoteIP(), time.Now().Unix()+int64(life), policyId, false, groupId, setId, "")
|
||||||
|
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusSeeOther)
|
||||||
http.Redirect(writer, req.WAFRaw(), originURL, http.StatusSeeOther)
|
http.Redirect(writer, req.WAFRaw(), originURL, http.StatusSeeOther)
|
||||||
|
|
||||||
return false
|
return false
|
||||||
@@ -241,6 +248,7 @@ func (this *CaptchaValidator) validate(actionConfig *CaptchaAction, policyId int
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
req.ProcessResponseHeaders(writer.Header(), http.StatusSeeOther)
|
||||||
http.Redirect(writer, req.WAFRaw(), req.WAFRaw().URL.String(), http.StatusSeeOther)
|
http.Redirect(writer, req.WAFRaw(), req.WAFRaw().URL.String(), http.StatusSeeOther)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ func (this *Get302Validator) Run(request requests.Request, writer http.ResponseW
|
|||||||
}
|
}
|
||||||
m, err := utils.SimpleDecryptMap(info)
|
m, err := utils.SimpleDecryptMap(info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
request.ProcessResponseHeaders(writer.Header(), http.StatusBadRequest)
|
||||||
|
writer.WriteHeader(http.StatusBadRequest)
|
||||||
_, _ = writer.Write([]byte("invalid request"))
|
_, _ = writer.Write([]byte("invalid request"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -51,5 +53,7 @@ func (this *Get302Validator) Run(request requests.Request, writer http.ResponseW
|
|||||||
|
|
||||||
// 返回原始URL
|
// 返回原始URL
|
||||||
var url = m.GetString("url")
|
var url = m.GetString("url")
|
||||||
|
|
||||||
|
request.ProcessResponseHeaders(writer.Header(), http.StatusFound)
|
||||||
http.Redirect(writer, request.WAFRaw(), url, http.StatusFound)
|
http.Redirect(writer, request.WAFRaw(), url, http.StatusFound)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user