一. 实现https
- gin默认是http接口,前面也了解到gin中存在一个子包"gin/contrib/secure"内部提供了一些安全相关的中间件,例如HTTPS重定向、内容安全策略(CSP)等
- 通过设置响应头信息来防止一些攻击方式, 如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
- 允许您自定义策略,以符合您的应用程序的安全需求和要求。
- 支持声明式安全措施,包括HSTS(HTTP Strict Transport Security)和HPKP(HTTP Public Key Pinning)。
- 可以通过"gin/contrib/secure"实现https的支持,注意
"gin/contrib/secure"与"github.com/unrolled/secure"是同一个东西,只是前者是后者的一个fork。它们都是用于Go的HTTP中间件
import (
"fmt"
"github.com/gin-gonic/gin"
//1.引入依赖
"github.com/unrolled/secure"
//也可以使用
//"gin/contrib/secure"
)
func main() {
router := gin.Default()
//2.添加https转发中间件
router.Use(LoadTls())
//开启端口监听
router.RunTLS(":8080", "ssl.pem", "ssl.key")
}
//中间件
func LoadTls() gin.HandlerFunc {
return func(c *gin.Context) {
//3.当接收到请求后中间件执行,封装一个secure
middleware := secure.New(secure.Options{
SSLRedirect: true,
SSLHost: "localhost:8080",
})
err := middleware.Process(c.Writer, c.Request)
if err != nil {
//如果出现错误,请不要继续。
fmt.Println(err)
return
}
// 继续往下处理
c.Next()
}
}
二. 防止XSS,CSRF
- XSS 跨站脚本攻击:利用 Web 应用程序中的漏洞,向用户的浏览器中注入恶意代码,从而实现攻击者想要的操作的攻击手段。攻击者通常会以某些方式在 Web 应用程序的输入字段中注入恶意脚本代码或 HTML 标记。当受害者访问被注入的页面时,这些恶意脚本代码或 HTML 标记会被执行,从而导致严重的安全问题
- CSRF 跨站请求伪造攻击:利用 Web 应用程序中的漏洞,向受害者的浏览器中发送恶意请求的攻击手段。攻击者通常会欺骗受害者点击一个看似无害的链接或按钮,从而在受害者的浏览器中执行恶意操作。由于 Web 应用程序在处理请求时无法区分正义和邪恶的请求,因此它们会将恶意请求视为合法请求,并执行相应的操作
- 通过github.com/unrolled/secure来设置响应头信息以防止XSS跨站脚本攻击和CSRF跨站请求伪造
import (
"github.com/gin-gonic/gin"
"github.com/unrolled/secure"
)
func main() {
r := gin.Default()
// 初始化 secure 中间件,开启防止 XSS 和 CSRF 攻击的选项
secureMiddleware := secure.New(secure.Options{
SSLRedirect: true,
SSLHost: "example.com",
STSSeconds: 315360000,
FrameDeny: true,
ContentSecurityPolicy: "default-src 'self'",
IsDevelopment: false,
})
// 将 secure 中间件作为 gin 的全局中间件
r.Use(func(c *gin.Context) {
if status := secureMiddleware.Process(c.Writer, c.Request); status > 0 {
c.AbortWithStatus(status)
}
c.Next()
})
// 添加路由处理程序
r.GET("/", func(c *gin.Context) {
c.String(200, "Hello, World!")
})
// 启动 gin 服务器
r.Run(":8080")
}
- secureMiddleware 通过以下几个机制来防止 XSS 攻击:
- 设置 Content-Security-Policy 头:以禁止外部脚本的运行。它可以限制哪些资源(例如脚本、图像、样式表等)可以被加载到 Web 页面中
- 设置 X-XSS-Protection 头:X-XSS-Protection 是一个由浏览器实现的安全功能,用于检测和防御 XSS 攻击。secureMiddleware 可以设置该头以启用浏览器的 X-XSS-Protection 功能。
- 对响应进行编码:当 Web 应用程序使用用户输入来生成响应内容时,需要对响应中的所有特殊字符进行编码,以确保它们不会被解释为 HTML 标记或 JavaScript 代码。
- secureMiddleware 通过以下几个机制来防止 CSRF 攻击:
- 设置 CSRF 标记:在每个表单中添加一个 CSRF 标记。该标记是由一个随机字符串生成的,它将在提交表单时一起提交,并在接受表单请求时进行验证。这可以有效地防止攻击者发送伪造的表单请求。
- 使用 HTTP-only Cookie:把 CSRF Token 存储在一个 HttpOnly Cookie 中,防止攻击者通过 JavaScript 访问