gin 十. gin-contrib之secure 支持https与安全设置

2023-10-27

一. 实现https

  1. gin默认是http接口,前面也了解到gin中存在一个子包"gin/contrib/secure"内部提供了一些安全相关的中间件,例如HTTPS重定向、内容安全策略(CSP)等
  1. 通过设置响应头信息来防止一些攻击方式, 如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
  2. 允许您自定义策略,以符合您的应用程序的安全需求和要求。
  3. 支持声明式安全措施,包括HSTS(HTTP Strict Transport Security)和HPKP(HTTP Public Key Pinning)。
  1. 可以通过"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

  1. XSS 跨站脚本攻击:利用 Web 应用程序中的漏洞,向用户的浏览器中注入恶意代码,从而实现攻击者想要的操作的攻击手段。攻击者通常会以某些方式在 Web 应用程序的输入字段中注入恶意脚本代码或 HTML 标记。当受害者访问被注入的页面时,这些恶意脚本代码或 HTML 标记会被执行,从而导致严重的安全问题
  2. CSRF 跨站请求伪造攻击:利用 Web 应用程序中的漏洞,向受害者的浏览器中发送恶意请求的攻击手段。攻击者通常会欺骗受害者点击一个看似无害的链接或按钮,从而在受害者的浏览器中执行恶意操作。由于 Web 应用程序在处理请求时无法区分正义和邪恶的请求,因此它们会将恶意请求视为合法请求,并执行相应的操作
  3. 通过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")
}
  1. secureMiddleware 通过以下几个机制来防止 XSS 攻击:
  1. 设置 Content-Security-Policy 头:以禁止外部脚本的运行。它可以限制哪些资源(例如脚本、图像、样式表等)可以被加载到 Web 页面中
  2. 设置 X-XSS-Protection 头:X-XSS-Protection 是一个由浏览器实现的安全功能,用于检测和防御 XSS 攻击。secureMiddleware 可以设置该头以启用浏览器的 X-XSS-Protection 功能。
  3. 对响应进行编码:当 Web 应用程序使用用户输入来生成响应内容时,需要对响应中的所有特殊字符进行编码,以确保它们不会被解释为 HTML 标记或 JavaScript 代码。
  1. secureMiddleware 通过以下几个机制来防止 CSRF 攻击:
  1. 设置 CSRF 标记:在每个表单中添加一个 CSRF 标记。该标记是由一个随机字符串生成的,它将在提交表单时一起提交,并在接受表单请求时进行验证。这可以有效地防止攻击者发送伪造的表单请求。
  2. 使用 HTTP-only Cookie:把 CSRF Token 存储在一个 HttpOnly Cookie 中,防止攻击者通过 JavaScript 访问
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gin 十. gin-contrib之secure 支持https与安全设置 的相关文章

随机推荐

  • Minio Browser

    Minio Browser Minio Browser使用Json Web Token来验证JSON RPC请求 初使请求为用户提供的AccessKey和SecretKey生成一个token令牌 目前这些令牌在10小时后到期 这是不可配置的
  • Apisix使用教程

    安装 推荐直接使用Docker来安装启动Apisix 安装docker 首先下载并安装docker https www docker com 下载之后 直接运行安装 安装后打开Docker Desktop 等它启动完 启动完之后 此时就是可
  • 图灵奖得主Judea Pearl:人工智能是如何走出死胡同的?

    作者 Judea Pearl Danna Mackenzie 编辑 Natalie AI 前线导读 人工智能研究专家 Judea Pearl 及其同事领导的因果关系革命突破多年的迷雾 厘清了知识的本质 确立了因果关系研究在科学探索中的核心地
  • 不同视角下的存储协议栈

    复杂度3 5 机密度3 5 最后更新2021 05 03 我们把AIX的存储协议栈归纳一下 从两个不同视角来观察 以AIX驱动实现视角 主要是文件系统驱动程序 被称为内核扩展可能更恰当 不过具体叫什么并不重要 LVM驱动程序 磁盘设备驱动程
  • Java小白一个,可以直接学习SpringBoot来做毕设吗?

    个人建议不要跳过SSM 很多人想要跳过SSM直接上手SpringBoot 但是SpringBoot中自动化配置 条件注解 Java配置等东西都基于Spring的 Java配置是Spring3开始提供的 条件注解也是Spring中的内容 很多
  • AGV轨迹matlab仿真,两轮差速AGV的轨迹跟踪控制研究 Study on Trajectory Tracking Control of Two-Wheel Difference Speed of...

    Software Engineering and Applications Vol 06 No 04 2017 Article ID 21608 9 pages 10 12677 SEA 2017 64007 Study on Trajec
  • QT学习14:QtXlsx操作Excel表

    一 前言 操作excel方式有 QAxObject 和QtXlsx 区别 Qt自带的QAxObject库操作excel的前提是电脑已经安装微软的Office 包含EXCEL 而QtXlsx可以直接使用免装Office且操作更简单 二 QtX
  • CNZZ埋点及点击量统计方法

    1 引入cnzz统计代码 document write unescape 3Cspan id 你的cnzzID 3E 3C span 3E 3Cscript src https s9 cnzz com z stat php 3Fid 3D1
  • Irrlicht引擎Shader渲染的BUG

    修改2 丢人了 回头一看原来的理解还是不够完整 如果在视图空间计算光照等 一般都会将法线变换到视图空间 想当然的做法是用视图矩阵来变换法线 这么做只有在物体没有缩放或是一致性缩放的情况下才是正确的 若是物体有非一致性缩放 uniform s
  • Python多版本管理工具--pyenv

    我们在平时的项目开发或者学习中 有可能使用不同的Python版本 大家都知道Python的版本非常多 如果我们把需要的不同版本的Python都下载到服务器上 管理起来会非常困难 多版本并存又容易互相干扰 搞不好整个服务器的Python环境会
  • WebSocked、SSE、http1.0、http1.1和http2.0之间的关系

    1 WebSocked是个啥 首先 WebSocked是html5搞出来的一种新的协议 所以和http没有什么联系 要说非要有联系就是他借用了http协议来完成一部分的握手 但它和http一样都是一种连接协议 建立在tcp协议之上 使用在应
  • 服务器端Windows系统下SVN配置

    服务器端Windows系统下SVN配置 在局域网或者公网上进行SVN配置 即客户端与服务器端不是同一台电脑 则服务器端需要利用相关软件进行相应配置 客户端配置请参见 Windows系统下SVN 本地配置 所需软件 Visual SVN Se
  • 实证研究的步骤_写一篇论文的大致步骤是什么呢?

    大部分写过论文的人都知道 完成一篇大论文 准备时间少则数月多则数年 一旦准备完成 论文不过数天或数周就可以完成 下面我们简单总结一下写一篇论文的大致步骤有哪些 一 选题 选题是否恰当 对于论文写作有非常大的影响 论文选题可以从本专业未研究过
  • 【仙女踩坑实录】VirtualBox设置中需要禁用硬件虚拟化才能启动虚拟机

    最近在用virtual box做实验 在设置中提示 需要禁用硬件虚拟化才能启动虚拟机 确认按钮灰色 并且无法启动虚拟机 于是重启 进到bios系统 网上说按F2或者根据电脑上的提示再开机的时候一直按就能进入 我没进去 不过幸好 之前设置过g
  • 【编译原理】LL(1)文法分析全过程(FIRST/FLLOW/SELECT集等)实现(c++语言)

    注 本程序只能进行LL 1 文法的分析 非LL 1 文法请转化为LL 1 文法 变量声明 string M 2000 2000 任务分析表 stack
  • JMX+Prometheus监控Grafana展示

    文章目录 概述 Java代码使用PrometheusApi统计监控指标 Prometheus Grafana展示 概述 最近在阅读InLong的源码 发现它采用通过JMX Prometheus进行指标监控 这里做了下延伸将介绍使用JMX P
  • 【配电网重构】高比例清洁能源接入下计及需求响应的配电网重构【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 数据 2 2 DG 与负荷 24 h 功率分布曲线 2 3 需求响应措施对重构结果的
  • 无需Avatarify 无需剪辑工具 一键生成多人版 “蚂蚁呀嘿“视频

    2021年3月1日更新2 1 调整人脸区域为椭圆 比圆形更贴合脸型 占用的面积变小 2 修复了人脸出现黑边的问题 如果人脸区域不合适 可调整ratio参数 2021年3月1日更新 1 调整人脸区域为圆形 更贴合脸型 占用的面积变小 2 增加
  • .net C#反编译及脱壳常用工具--小结

    1 Reflector 微软自家工具 推荐 Reflector是最为流行的 Net反编译工具 Reflector是由微软员工Lutz Roeder编写的免费程序 Reflector的出现使 NET程序员眼前豁然开朗 因为这个免费工具可以将
  • gin 十. gin-contrib之secure 支持https与安全设置

    目录 一 实现https 二 防止XSS CSRF 一 实现https gin默认是http接口 前面也了解到gin中存在一个子包 gin contrib secure 内部提供了一些安全相关的中间件 例如HTTPS重定向 内容安全策略 C