Gin 通过中间件批量过滤 POST GET 数据

Gin 批量过滤 POST 数据

func SafePOST(ctx *gin.Context, newString string, needReplaceString ...string) {
	if ctx.Request.Method == "POST" {
		// 读取请求体中的POST数据
		bodyBytes, err := io.ReadAll(ctx.Request.Body)
		if err != nil {
			ctx.Abort()
			return
		}
		bodyString, err := url.QueryUnescape(string(bodyBytes))
		if err != nil {
			ctx.Abort()
			return
		}
		for _, v := range needReplaceString {
			bodyString = strings.ReplaceAll(bodyString, v, newString)
			bodyString = strings.ReplaceAll(bodyString, v, newString)
		}
		ctx.Request.Body = io.NopCloser(bytes.NewReader([]byte(bodyString)))
	}
}

在路由中间件内或者路由函数内执行 SafePOST 函数即可。

Gin 批量过滤 GET 数据

func SafeQuery(ctx *gin.Context, newString string, needReplaceString ...string) {
	if ctx.Request.URL.RawQuery == "" {
		return
	}
	rawQuery, err := url.QueryUnescape(string(ctx.Request.URL.RawQuery))
	if err != nil {
		ctx.Abort()
		return
	}

	for _, v := range needReplaceString {
		rawQuery = strings.ReplaceAll(rawQuery, v, newString)
	}
	ctx.Request.URL.RawQuery = rawQuery
}

在路由中间件内或者路由函数内执行 SafeQuery 函数即可。