go实现waf web防火墙代理请求示例代码

代码语言:golang

所属分类:其他

代码描述:go实现waf web防火墙代理请求示例代码,可以限流、过滤危险请求与响应,非正常请求等过滤,基于反向代理实现。

代码标签: go waf web 防火墙 代理 请求 示例 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

// main.go
package main

import (
	"fmt"
	"log"
	"net"
	"net/http"
	"net/http/httputil"
	"net/url"
	"regexp"
	"strings"
	"sync"
	"time"
)

const (
	// 后端 Nginx 地址
	backendAddr = "http://127.0.0.1:8081"

	// 每 IP 每分钟最大请求数
	rateLimit = 20
)

// 全局限流计数器(生产环境建议用 Redis)
var (
	ipCounter = make(map[string]int64)
	counterMu = sync.RWMutex{}
)

func init() {
	// 每分钟清空计数器(简化版)
	go func() {
		for {
			time.Sleep(1 * time.Minute)
			counterMu.Lock()
			ipCounter = make(map[string]int64)
			counterMu.Unlock()
		}
	}()
}

// 获取客户端真实 IP(支持 X-Forwarded-For)
func getClientIP(r *http.Request) string {
	if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
		return strings.Split(xff, ",")[0]
	}
	if r.........完整代码请登录后点击上方下载按钮下载查看

网友评论0