Gin 数据安全工具

XSS 跨站脚本攻击

XSS全称是Cross Site Scripting ,即跨站脚本攻击,原理是利用 POST、GET等数据请求将脚本注入到内容,当内容页面运行时脚本运行,达到攻击的目的。

XSS 跨站脚本攻击防御

可以过滤跨站攻击的关键字符,如 "<", ">" 使脚本无法以 js、img 等文件形式注入到页面。


gotool 提供了 safeData 相关函数,可以更方便地进行数据安全性过滤:

SafePOST

功能 : 替换 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)
	})
}

SafeQuery

功能 : 替换 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)

    }

}	

SafeData

功能 : 替换字符串数据中指定的字符(多个)为指定字符

参数 :

1 data string 需要替换的字符串
2 newString string 替换后字符
3 needReplaceString ...string 需要替换的字符

示例 :

全局过滤可以将过滤函数放置在 gin 中间件中,局部过滤将过滤函数放置在路由函数内即可:

str := "<?abc>"
str = gintool.SafeData(str, "_", "<", ">")
fmt.Printf("str: %v\n", str)