当前位置: 首页 > 知识库问答 >
问题:

html5 - 小程序下发二维码,然后扫码验证入场券功能,怎么设计是安全的?

松霖
2024-07-12

小程序下发二维码,然后扫码验证入场券功能,怎么设计是安全的? 有什么好的思路吗?

Page({
  data: {
    ticketValid: false, // 用于表示入场券是否有效
    ticketInfo: null,   // 用于存储入场券的信息
  },

  // 扫码函数
  scanTicket: function() {
    wx.scanCode({
      onlyFromCamera: true, // 只允许从相机扫码,不允许从相册选取
      success: (res) => {
        if (res.scanType === 'qrCode') { // 确保扫描的是二维码
          const ticketData = res.result; // 获取扫码结果,通常是二维码中的数据
          this.verifyTicket(ticketData);
        } else {
          wx.showToast({
            title: '请扫描正确的二维码',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('扫码失败:', err);
      }
    });
  },

  // 验证入场券
  verifyTicket: function(ticketData) {
    // 这里应该调用后端API来验证ticketData
    wx.request({
      url: '/api/verify-ticket',
      method: 'POST',
      data: {
        ticketData: ticketData
      },
      success: (res) => {
        if (res.statusCode === 200 && res.data.success) {
          this.setData({
            ticketValid: true,
            ticketInfo: res.data.ticketInfo
          });
          wx.showToast({
            title: '入场券有效',
            icon: 'success'
          });
        } else {
          this.setData({
            ticketValid: false,
            ticketInfo: null
          });
          wx.showToast({
            title: '入场券无效',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('验证入场券失败:', err);
      }
    });
  }
});

共有3个答案

梅欣然
2024-07-12

场景不是特别明确,但是从代码里面理解到 是需要 用户 主扫(用户调起摄像头) 小程序给个一个“入场券”验证功能的“二维码”;
这个流程就很奇怪,扫了 之后 用户进入到一个什么样的界面? 怎么调取入场券?

正确的流程 建议 应该 大概 是这样会更合理一点:
1.小程序给有资质的用户下发 入场券 ,以二维码的显示方式;
2.现场有个扫码盒 或 枪 ;
3.用户调出二维码 被扫 ;
4.这个时候才有“防伪”(安全机制存在的必要性)验证的存在意义;

防伪验证 用这个id 找后端要状态(不要前端处理就行了) 是否用过 是否有效(时间、次数等) ,只要数据库没被拉过,一般都不会有什么问题;
如果有多个通道,稍微注意处理一下并发就行,最简单粗暴的就是 加锁了(当然锁也有缺点,那是另外个话题)

濮阳振
2024-07-12

使用非对称加密实现数字签名:

  • 生成一对密钥,包括一个私钥和一个公钥,私钥用于签名,公钥用于验证签名
  • 对原始二维码内容(随机数字 + 时间戳 + 手机 + 票据编号 + 其他)进行哈希运算,生成固定长度的消息摘要
  • 使用私钥对消息摘要进行加密,生成数字签名
  • 随机数字 + 时间戳 + 手机 + 票据编号 + 其他 和签名放在二维码中
  • 验票的时候使用公钥对签名进行解密,然后与接收到的二维码内容的消息摘要进行比较,如果匹配,则说明签名有效,数据未被篡改

其中时间戳等信息可以有效防止二维码被重复使用,和微信支付的签名方式相似

申屠英韶
2024-07-12

1、支持扫二维码核销。二维码可以动态生成,并且60秒的有效期,过期后老二维码失效。
2、固定的券码核销(通常由纯数字或者数字+字母),券码一直是固定的,需要妥善保管。
查验都是通过后端接口去校验,保证安全。

 类似资料:
  • 本文向大家介绍Android 二维码扫描和生成二维码功能,包括了Android 二维码扫描和生成二维码功能的使用技巧和注意事项,需要的朋友参考一下 在APP开发中,常遇到二维码扫描功能和生成二维码的需求。Android大部分是集成了zxing这个开源项目的扫码功能。 开源项目地址 下面给大家介绍一下具体的集成步骤 集成步骤 参考demo 1.demo展示如下: 1.1demo首页   1.2扫描界

  • 本文向大家介绍iOS实现二维码的扫描功能,包括了iOS实现二维码的扫描功能的使用技巧和注意事项,需要的朋友参考一下 直接上代码,就不多废话了

  • 利用 iOS7 SDK自带的类库实现扫描二维码 、条形码功能。这份代理里面有两种扫描方法 一种是在 ios7 以下利用ZBar类库扫描方法,一种是 iOS7调用AVFoundation库的方法。需要真机测试。扫描速度特别快,扫描成功之后,在Xcode的输出框输出扫描的内容。 [Code4App.com]

  • 本文向大家介绍js实现发送验证码后的倒计时功能,包括了js实现发送验证码后的倒计时功能的使用技巧和注意事项,需要的朋友参考一下 之前分享过只用js实现倒计时的功能,后来测试时发现,刷新或关闭网页后,倒计时就不能用了.网上也没找到合适的解决方案,所以自己就写了个,这次的算是优化版吧,能满足刷新或重新打开网页后,倒计时依然能用 特别说明:      cookie最初创建的有效时间是60秒.也就是说,你

  • 本文向大家介绍扫二维码下载apk并统计被扫描次数,包括了扫二维码下载apk并统计被扫描次数的使用技巧和注意事项,需要的朋友参考一下 需求:想让用户扫描一个二维码就能下载APP,并统计被扫描次数。 两种实现方法: 1.一般我们用草料生成二维码,如果没有注册的话只能生成一个包含下载网址的静态码,没有统计功能,而且出了自己截图保存外,草料是不会保存你的二维码的。 如果注册草料后,可以选择生成活码。所谓活

  • 本文向大家介绍Zend Framework生成验证码并实现验证码验证功能(附demo源码下载),包括了Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Zend Framework生成验证码并实现验证码验证功能的方法。分享给大家供大家参考,具体如下: 今天讲述如何在留言本中实现验证码的功能..这样有利于我们网站减

  • 本文向大家介绍js中调用微信的扫描二维码功能的实现代码,包括了js中调用微信的扫描二维码功能的实现代码的使用技巧和注意事项,需要的朋友参考一下 关键代码 注意事项: “获取微信认证参数” 这个的前提是您能够有自己的微信开发资质,并能获取到正确的参数 公众号的唯一标识 签名的时间戳 签名随机串 常见的错误 config:invalid signature 解决办法 “当前网页的地址”-----哈哈,

  • 本文向大家介绍.Net Core 下使用ZKWeb.System.Drawing实现验证码功能(图形验证码),包括了.Net Core 下使用ZKWeb.System.Drawing实现验证码功能(图形验证码)的使用技巧和注意事项,需要的朋友参考一下 本文介绍.Net Core下用第三方ZKWeb.System.Drawing实现验证码功能。 通过测试的系统: Windows 8.1 64bit