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 函数即可。
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 函数即可。