清风细雨楼 Design By www.eepep.com
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分 计算机 和人类的 图灵测试 )的缩写,是一种区分用户是计算机还是人的公共全自动 程序 。可以防止:恶意破解密码、 刷票 、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
传统网站验证码工作机制
- 客户端请求服务器获取验证码图片
- 服务器生成随机串(验证码值)写入Session,并将验证码值写入到图片中返回给客户端
- 客户端输入图片上的字符串提交给服务器验证
- 服务器比对客户端提交的字符串值和 Session 中是否匹配,如果匹配则通过验证
由于服务器生成的验证码值从始至终均未返回给客户端,因此,客户端只能从图片中识别验证码字符串,从而保证人机校验逻辑。
Go的HTTP验证码
思路
Go 语言的 HTTP 服务器默认不支持 Session,因此验证码值需要换个思路存储,以下是不使用 Session 的逻辑
- 客户端请求服务器获取验证码ID
- 服务器生成验证码 ID,并生成验证码值,将 ID 和值的映射关系记录到内存或缓存,并将 ID 返回给客户端
- 客户端根据返回的 ID 请求服务器获取验证码图片
- 服务器获取到验证码 ID,从内存或缓存中取出验证码值,将该值写入图片并将图片返回给客户端
- 客户端提交验证码 ID(第1步获得)和验证码值给服务器验证
- 服务器获取验证码 ID,从内存或缓存中取出验证码值与客户端提交的验证码值比对
示例
安装验证码依赖
github.com/dchest/captcha
代码实现
package main import ( "fmt" "github.com/dchest/captcha" "log" "net/http" ) func main() { // 获取验证码 ID http.HandleFunc("/captcha/generate", func(w http.ResponseWriter, r *http.Request) { id := captcha.NewLen(6) if _, err := fmt.Fprint(w, id); err != nil { log.Println("generate captcha error", err) } }) // 获取验证码图片 http.HandleFunc("/captcha/image", func(w http.ResponseWriter, r *http.Request) { id := r.URL.Query().Get("id") if id == "" { http.Error(w, "Bad Request", http.StatusBadRequest) return } w.Header().Set("Content-Type", "image/png") if err := captcha.WriteImage(w, id, 120, 80); err != nil { log.Println("show captcha error", err) } }) // 业务处理 http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { log.Println("parseForm error", err) http.Error(w, "Internal Error", http.StatusInternalServerError) return } // 获取验证码 ID 和验证码值 id := r.FormValue("id") value := r.FormValue("value") // 比对提交的验证码值和内存中的验证码值 if captcha.VerifyString(id, value) { fmt.Fprint(w, "ok") } else { fmt.Fprint(w, "mismatch") } }) log.Fatal(http.ListenAndServe(":8080", nil)) }
运行
- 访问/captcha/generate获得验证码 ID
- 访问/captcha/image"external nofollow" target="_blank" href="https://github.com/xialeistudio/go-http-captcha-example">https://github.com/xialeistudio/go-http-captcha-example
清风细雨楼 Design By www.eepep.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
清风细雨楼 Design By www.eepep.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年12月28日
2024年12月28日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]