「Go工具箱」web中想做到cookie值安全?securecookie库的使用和实现原理

本文介绍了Go语言中的securecookie库,用于增强web应用中cookie的安全性。通过编码、加密和hash操作,确保敏感信息的安全。文章详细讲解了securecookie的使用方法、实现原理,包括序列化、加密、base64编码和HMAC的运用,并提到了在beego框架中的应用。

在工作中,主动性不仅体现在像老黄牛一样把本职工作做好,还要主动和领导沟通,承担更多、更重要的任务。 — 吴军 《格局》

大家好,我是渔夫子。「Go学堂」新推出“Go工具箱”系列,意在给大家分享使用go语言编写的、实用的、好玩的工具。

今天给大家推荐的是web应用安全防护方面的另一个包:securecookie。该包给cookie中存储的敏感信息进行编、解码及解密、解密功能,以保证数据的安全。

securecookie小档案

securecookie小档案
star 595 used by -
contributors 19 作者 Gorilla
功能简介 对cookie中存储的敏感信息进行编码、解码以及加密、解密功能,以保证数据不能被伪造。
项目地址 https://github.com/gorilla/securecookie
相关知识 web安全、加密解密、HMAC编码解码、base64编码

一、安装

 go get github.com/gorilla/securecookie 

二、使用示例

明文的cookie值输出

我们先来看下未进行编码或未加密的cookie输出是什么样的。本文以beego框架为例,当然在beego中已经实现了安全的cookie输出,稍后再看其具体的实现。这里主要是来说明cookie中未编码的输出和使用securecookie包后cookie的值输出。

package main

import (
	"github.com/beego/beego"
)


func main() {
   
   
	beego.Router("/", &MainController{
   
   })

	beego.RunWithMiddleWares(":8080")
}

type MainController struct {
   
   
	beego.Controller
}

func (this *MainController) Get() {
   
   
	this.Ctx.Output.Cookie("userid", "1234567")
	this.Ctx.Output.Body([]byte("Hello World"))
}

执行go run main.go,然后在浏览器中输入http://localhost:8080/,查看cookie的输出是明文的。如下:
在这里插入图片描述

使用securecookie包对cookie值进行编码

securecookie包的使用也很简单。首先使用securecookie.New函数实例化一个securecookie实例,在实例化的时候需要传入一个32位或64位的hashkey值。然后调用securecookie实例的Encode对明文值进行编码即可。如下示例:

package main

import (
	"github.com/beego/beego"
	"github.com/gorilla/securecookie"
)


func main() {
   
   
	beego.Router("/", &MainController{
   
   })

	beego.RunWithMiddleWares(":8080")
}

type MainController struct {
   
   
	beego.Controller
}

func (this *MainController) Get() {
   
   
	// Hash keys should be at least 32 bytes long
	var hashKey = []byte("keep-it-secret-keep-it-safe-----")
	// 实例化securecookie
	var s = securecookie.New(hashKey, nil)

	name := "userid"
	value := "1234567"

    // 对value进行编码
	encodeValue, _ := s.Encode(name, value)

    // 输出编码后的cookie值
	this.Ctx.Output.Cookie(name, encodeValue)
	this.Ctx.Output.Body([]byte("Hello World")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔夫子@Go学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值