• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 分享一个Golang Http 验证码示例

分享一个Golang Http 验证码示例

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Golang Http,Golang验证码等相关知识,希望对您有所帮助

Golang Http 验证码示例

验证码(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 mainimport (    "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?id=验证码 ID

访问/login,并输入第一步的验证码 ID 和第二步的验证码值即可查看验证结果

项目地址

https://github.com/xialeistudio/go-http-captcha-example




分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享一个Golang Http 验证码示例

相关文章

  • 2022-04-29WordPress建站教程,纯代码实现wordpress防止发布文章出现标题重复,自动检测重复标题文章
  • 2022-04-29Photoshop绘制蓝色风格的游戏手柄
  • 2022-04-29Thinkphp5整合phpsocketio过程亲自踩的坑!
  • 2022-04-29小程序如何获取input标签的值
  • 2022-04-29PhotoShop制作魔幻霓虹火焰字效果的教程
  • 2022-04-29Photoshop设计绚丽魔幻效果的艺术字
  • 2022-04-29Photoshop设计复古风格的金属艺术字
  • 2022-04-29HTTP 返回状态码汇总
  • 2022-04-29PHP怎么判断字符串含不含中文
  • 2022-04-29浅析Angular+rxjs怎么实现拖拽功能?

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 全平台通用评论神器一键自动填写昵称、邮箱和网址
    • Photoshop制作超酷的燃烧火焰字教程
    • 免费DedeCMS版QQ登陆插件FOR V5.5 V5.6 V5.7
    • 动态获取织梦CMS最新更新 利于收录的SiteMap.php文
    • 帝国CMS下载地址不用弹窗修改方式
    • Laravel如何使用Observer实现日志管理模块
    • Photoshop打造超酷的火焰汽车
    • 改用Server酱Turbo版推送WordPress评论
    • “内容”优化影响排名 “内容”提升用户体验
    • 介绍PHP + MySQL 实现数据分页显示

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有