在工作中,主动性不仅体现在像老黄牛一样把本职工作做好,还要主动和领导沟通,承担更多、更重要的任务。 — 吴军 《格局》
大家好,我是渔夫子。「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")

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

被折叠的 条评论
为什么被折叠?



