Files
server_torii/internal/check/HTTPFlood.go
2025-04-24 21:02:19 -04:00

34 lines
1.1 KiB
Go

package check
import (
"log"
"server_torii/internal/action"
"server_torii/internal/config"
"server_torii/internal/dataType"
)
func HTTPFlood(reqData dataType.UserRequest, ruleSet *config.RuleSet, decision *action.Decision, sharedMem *dataType.SharedMemory) {
ipKey := reqData.RemoteIP
sharedMem.HTTPFloodSpeedLimitCounter.Add(ipKey, 1)
uriKey := reqData.RemoteIP + "|" + reqData.Uri
sharedMem.HTTPFloodSameURILimitCounter.Add(uriKey, 1)
for window, limit := range ruleSet.HTTPFloodRule.HTTPFloodSpeedLimit {
if sharedMem.HTTPFloodSpeedLimitCounter.Query(ipKey, window) > limit {
log.Printf("HTTPFlood rate limit exceeded: IP %s, window %d, limit %d", ipKey, window, limit)
decision.SetCode(action.Done, []byte("429"))
return
}
}
for window, limit := range ruleSet.HTTPFloodRule.HTTPFloodSameURILimit {
if sharedMem.HTTPFloodSameURILimitCounter.Query(uriKey, window) > limit {
log.Printf("HTTPFlood URI rate limit exceeded: IP %s, URI %s, window %d, limit %d", ipKey, reqData.Uri, window, limit)
decision.SetCode(action.Done, []byte("429"))
return
}
}
decision.Set(action.Continue)
}