f
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -403,9 +404,24 @@ func (m *DailyRateLimitMiddleware) checkReferer(c *gin.Context) error {
|
||||
|
||||
// 检查允许的Referer
|
||||
if len(m.limitConfig.AllowedReferers) > 0 {
|
||||
parsedReferer, err := url.Parse(referer)
|
||||
if err != nil || parsedReferer.Scheme == "" || parsedReferer.Host == "" {
|
||||
return fmt.Errorf("Referer格式无效")
|
||||
}
|
||||
refererOrigin := parsedReferer.Scheme + "://" + parsedReferer.Host
|
||||
|
||||
allowed := false
|
||||
for _, allowedRef := range m.limitConfig.AllowedReferers {
|
||||
if strings.Contains(referer, allowedRef) {
|
||||
allowedRef = strings.TrimSpace(allowedRef)
|
||||
if allowedRef == "" {
|
||||
continue
|
||||
}
|
||||
parsedAllowed, parseErr := url.Parse(allowedRef)
|
||||
if parseErr != nil || parsedAllowed.Scheme == "" || parsedAllowed.Host == "" {
|
||||
continue
|
||||
}
|
||||
allowedOrigin := parsedAllowed.Scheme + "://" + parsedAllowed.Host
|
||||
if refererOrigin == allowedOrigin {
|
||||
allowed = true
|
||||
break
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user