XSS全称是Cross Site Scripting ,即跨站脚本攻击,原理是利用 POST、GET等数据请求将脚本注入到内容,当内容页面运行时脚本运行,达到攻击的目的。
可以过滤跨站攻击的关键字符,如 "<", ">" 使脚本无法以 js、img 等文件形式注入到页面。
gotool 提供了 safeData 相关函数,可以更方便地进行数据安全性过滤:
功能 : 替换 POST 数据中指定的字符(多个)为指定字符
参数 :
1 ctx *gin.Context gin 上下文
2 newString string 替换后字符
3 needReplaceString ...string 需要替换的字符
示例 :
全局过滤可以将过滤函数放置在 gin 中间件中,局部过滤将过滤函数放置在路由函数内即可:
func main() {
r := gin.Default()
r.Use(func(ctx *gin.Context) {
gintool.SafePOST(ctx, "_", "<", ">")
})
// POST
r.POST("/", func(ctx *gin.Context) {
name := ctx.PostForm("name")
fmt.Printf("name: %v\n", name)
})
}
功能 : 替换 GET 数据中指定的字符(多个)为指定字符
参数 :
1 ctx *gin.Context gin 上下文
2 newString string 替换后字符
3 needReplaceString ...string 需要替换的字符
示例 :
全局过滤可以将过滤函数放置在 gin 中间件中,局部过滤将过滤函数放置在路由函数内即可:
func main() {
r := gin.Default()
r.Use(func(ctx *gin.Context) {
gintool.SafeQuery(ctx, "_", "<", ">")
})
r.GET("/", func(ctx *gin.Context) {
a := ctx.Query("a")
fmt.Printf("a: %v\n", a)
}
}
功能 : 替换字符串数据中指定的字符(多个)为指定字符
参数 :
1 data string 需要替换的字符串
2 newString string 替换后字符
3 needReplaceString ...string 需要替换的字符
示例 :
全局过滤可以将过滤函数放置在 gin 中间件中,局部过滤将过滤函数放置在路由函数内即可:
str := "<?abc>"
str = gintool.SafeData(str, "_", "<", ">")
fmt.Printf("str: %v\n", str)