【Part 1】现在去博物馆都预约不上了,黑产多少有点疯狂了

news2024/11/16 20:47:46

近几年不知道为啥,突然兴起博物馆热了,去某个城市,总想去当地的博物馆去打卡(当然,可能重点还在打卡)。但是周末去湖南省博物馆,发现免费的博物馆,现在已经预约不上了,最后问了一下,说是可以海鲜市场代约。平时代抢的价格在45-80块钱左右,周末就贵很多,上涨到80-109之间,就离谱。

image.png
作为安全圈的人,这一下就想到了黑灰产。这性质,难道不是和演唱会的门票一样吗?买不到票,得找黄牛。

就我登录的小程序流程来看,没有什么验证码措施,只是会让手机登录,所以整个网站的防御措施是很弱的,这黄牛抢票不是轻而易举?

所以我们今天来从安全的角度,来看看我们博物馆要如何做好小程序的防刷防护。

浅谈黄牛的刷票手段

黄牛之所以手中能握有大量博物馆门票,除了研发专门用于抢票的软件,可以在售票开启第一时间抢到大量门票,甚至还形成较完整的抢票产业链。

抢票拼的是速度,黄牛为什么比我们普通人更容易抢到?主要是因为下单速度不同。同样一件商品,A比B早1秒钟,则A能够购买到,B则无法购买到。在下单速度方面,人靠的是神经反应,而软件是基于预先设置流程,因此运行速度远超过人,抢购成功率远远高于普通消费者。

黄牛就是通过作弊工具,进行批量注册登录抢购等操作,从而快速、瞬时、批量对指定商品、服务进行哄抢。同时作弊工具集成破解功能,能破解下单协议,绕过图片验证码,自动更换IP地址,伪造设备编号等。只需要填写好账号密码,设置好运行时间,就能够完成自动抢购,省时省力又省钱。

是时候祭出这张图了:

黑灰产手机.png

博物馆升级防护手段攻略

人机验证码

一般来说,最基础的手段,就是加一个动态的验证码。但是如果只是普通的图片验证码,那对黄牛来说,也是不在话下。所以可以使用现在最新一代AIGC验证码,凭借AIGC高效地产图能力,来提高黑灰产的破解成本,进而让他觉得去花大力气抢票不值得。

接入方式一般是插件式的接入,会比较方便。所以我们今天就先讲插件式的接入方式。

流程是:

1)找到插件

先关联自己的微信小程序,然后选择相应的插件

image.png

2)获取密钥

未注册用户可在顶象官网进行账号注册,创建应用获取应用密钥AppID和AppSecret。 已注册用户,可直接在顶象控制台->无感验证->应用管理页面获取对应的AppID和AppSecret。

3)集成插件

声明插件:在app.json中声明插件

{
  "plugins": {
    "captcha": {
      "version": "1.3.4", //验证码微信小程序插件版本号,后续更新只需更改版本号
      "provider": "wxbf8483dfc5ac6817" //唯一值,小程序插件id,不可更改
    }
  }
}

在页面.json中引入自定义组件

{
  "usingComponents": {
    "basic": "plugin://captcha/basic",
    "oneclick": "plugin://captcha/oneclick", //请注意⚠️,1.3.*版本中不支持oneclick,可以省略掉本行内容
  }
}
4)使用插件
  • 点击式

在页面.wxml中使用插件

<oneclick bindsuccess='captchaSuccess' bindhide='captchaHide' oneclickReload='{{captchaReload}}' captchaShow='{{captchaShow}}' options='{{options}}'/>
<button bindtap='login'>登陆</button>

在页面.js中监听事件

Page({
  data: {
    options: {
      appId: '这里填写你在顶象官网申请到的appId', //控制台应用管理页面进行获取
      style: 'oneclick'
    },
    captchaShow: false,
    captchaReload: false
  },

  login: function () {
    // captchaReload用来重置验证码
    this.setData({
      captchaReload: true,
      captchaShow: true
    })
  },

  // 验证码成功回调
  captchaSuccess: function (data) {
    console.log('验证码成功回调token:', data.detail)  //获取验证码token,用于后端验证码校验
    this.setData({
      captchaReload: false,
      captchaShow: false,
    })
  },

  // 验证码关闭回调
  captchaHide: function () {
    console.log('captcha_hide')
    this.setData({
        captchaShow: false,
        captchaReload: false
    })
  }
  // 注意!在小程序逻辑中,captchaShow和captchaReload必须有变化才会触发相应逻辑
  // 即captchaShow必须从false变为true才会展示验证码
  // 即captchaReload必须从false变为true才会重新加载验证码
})
  • 弹出式

在页面.wxml中使用插件

<basic bindsuccess='captchaSuccess' bindhide='captchaHide' captchaReload='{{captchaReload}}' captchaShow='{{captchaShow}}' options='{{options}}'/>
<button bindtap='login'>登陆</button>

在页面.js中监听事件

Page({
  data: {
    options: {
        appId: '这里填写你在顶象官网申请到的appId',  //控制台应用管理页面进行获取
        style: 'popup'
    },
    captchaShow: false,
    captchaReload: false
  },

  login: function () {
    // captchaShow 用于弹出验证码
    // captchaReload 用于重置验证码
    this.setData({
     captchaReload: true,
     captchaShow: true
    })
  },

  // 验证码成功回调
  captchaSuccess: function (data) {
    // 验证成功返回的 token
    console.log('验证码成功回调token:', data.detail) //获取验证码token,用于后端验证码校验
    this.setData({
      captchaShow: false,
      captchaReload: false
    })
  },

  // 验证码关闭回调
  captchaHide: function () {
   console.log('captcha_hide')
   this.setData({
     captchaShow: false,
     captchaReload: false,
   })
  }
})

未完待续

小程序的接入方式会包括插件式和跳转式。今天就先介绍到这里,明天继续说一下跳转式要怎么截图,摸鱼时间结束~

如果需要提前知晓完整版接入方式,直接前往观看>>>小程序验证接入指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python面向对象编程学习1

python面向对象的基本要点&#xff0c; 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 使用 class 语句来创建一个新类&#xff0c;class 之后为类的名称并以冒号结尾&#xff1b; __init__()方…

lammps教程:固定边界丢失原子的几种解决办法

我是小马老师&#xff0c;本文介绍固定边界丢失原子的几种解决办法。 在lammps摩擦、润湿、冲击等模拟中&#xff0c;z方向多设为固定的f边界&#xff0c;如何设置不合理&#xff0c;会出现丢失原子的情况。 1.原因分析 以切削模拟为例&#xff0c;边界条件设为ppf&#xff…

PHP+MySQL:查询所有表格信息

效果 代码 $sql "SHOW TABLES"; $sql "SHOW TABLES"; $result DB_query($sql, $db); $myrow DB_fetch_array($result) echo <td> <a href" . $RootPath . /table_detial.php?table_name . $myrow[0] . "> . $myrow[0] . …

使用Secure CRT自动记录日志的方法

窍门一&#xff1a;自动记录系统日志 配置网络或者系统设备&#xff0c;日志记录必可不少。 养成日志记录的工作习惯在某些关键时候绝对能够帮你大忙。可以帮你记录设备的交互信息&#xff0c;方便后续问题追溯。 例如配置过程中出现故障&#xff0c;你需要自证清白&#xf…

MQ(消息中间件)概述及 RabbitMQ 的基本介绍

概述 消息中间件&#xff08;MQ&#xff09; 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。流量削锋 &#xff1a; 削减…

云原生之深入解析Hadoop如何在K8S环境中部署

一、准备工作 Hadoop 是 Apache 软件基金会下一个开源分布式计算平台&#xff0c;以 HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce&#xff08;Hadoop2.0 加入了 YARN&#xff0c;Yarn 是资源调度框架&#xff0c;能够细粒度的管理和调度任务&…

Java8中Lambda表达式和方法引用

一、Lambda表达式 1.1 函数式编程思想 1&#xff09;概念 ​ 面向对象思想需要关注用什么对象完成什么事情。而函数式编程思想就类似于我们数学中的函数。它主要关注的是对数据进行了什么操作。 2&#xff09;优点 代码简洁&#xff0c;开发快速接近自然语言&#xff0c;易…

1-n范围内的质数查找:埃拉托斯特尼筛法

文章目录 质数查找思路质数定义代码思路 写法重要逻辑&#xff1a;第一层for循环结束条件是i * i < n而不是i<n第二层循环如何筛查i所有倍数 完整版&#xff1a;返回0-n正整数中所有质数时间复杂度例题参考资料&#xff1a; 质数查找思路 质数定义 质数是一个自然数&am…

操作系统之调度算法总结

目录 一、进度调度算法 二、内存调度算法 一、先来先服务调度算法 二、最短寻道时间优先调度算法 三、扫描算法 四、循环扫描算法 五、LOOK和C-LOOK算法 三、内存页面置换算法 一、进度调度算法 常见的进度调度算法以及特点如下&#xff1a; 二、磁盘调度算法 一、先…

【大数据】初步认识StarRocks

StarRocks是什么 StarRocks 是新一代极速全场景 MPP 数据库。 StarRocks 充分吸收关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果&#xff0c;在业界实践的基础上&#xff0c;进一步改进优化、升级架构&#xff0c;并增添了众多全新功能&#xff0c;形成了全新…

数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘、图算法,搜索算法等

【机器学习入门与实践】入门必看系列&#xff0c;含数据挖掘项目实战&#xff1a;模型融合、特征优化、特征降维、探索性分析等&#xff0c;实战带你掌握机器学习数据挖掘 专栏详细介绍&#xff1a;【机器学习入门与实践】合集入门必看系列&#xff0c;含数据挖掘项目实战&…

TiDB(1):TiDB简介

1 从MySQL到TiDB 1.1 场景引入 假设现在有一个高速发展的互联网公司,核心业务库MySQL的数据量已经近亿行,且还在不断增长中,公司对于数据资产较为重视,所有数据要求多副本保存至少5年,且除了有对历史数据进行统计分析的离线报表业务外,还有一些针对用户数据实时查询的需求,如用…

软件测试技能,JMeter压力测试教程,签名sign(BeanShell 预处理程序)(二十)

前言 一般公司对外的接口都会用到sign签名&#xff0c;对不同的客户提供不同的apikey ,这样可以提高接口请求的安全性&#xff0c;避免被人抓包后乱请求 之前讲过用python代码实现sign签名&#xff0c;这次介绍jmeter上如何实现sign签名&#xff0c;思路都是差不多的 一、si…

Java框架之springboot基础

写在前面 本文看下springboot相关的基础内容。 1&#xff1a;从spring到springboot 在工作中&#xff0c;如果是我们想要引入某个框架&#xff0c;比如引入springMVC&#xff0c;就需要在web.xml中配置DispatcherServlet&#xff0c;在springmvc的配置文件中配置视图解析器等…

App自动化测试|Appium+Python自动化测试环境搭建

windows下搭建pythonappium环境 搭建过程步骤如下&#xff1a; 安装jdk并配置好环境变量&#xff08;jdk版本1.8以上&#xff09;安装android-sdk并配置好环境变量&#xff1b;具体步骤见&#xff1a;Android Studio安装(推荐使用这种方法安装SDK) - 环境配置 - 测试人社区安…

ASEMI代理海矽美SFP3012, 快恢复二极管SFP3012参数

编辑-Z SFP3012参数描述&#xff1a; 型号&#xff1a;SFP3012 最大反向重复峰值电压VRRM&#xff1a;1200V 平均整流正向电流IF&#xff1a;30A 反向恢复时间TRR&#xff1a;≤65nS 正向峰值浪涌电流IFSM&#xff1a;1602A 工作接点温度TJ&#xff1a;-40&#xff5e;1…

【数据挖掘】时间序列教程【七】

4.3 分布式滞后模型 考虑响应时间序列 y t 和输入(或“曝光”)时间序列 X t 。可能还有其他值得考虑的协变量,我们暂时忽略它们并在下一节中讨论它们的包含情况。我们将考虑以下形式的模型 在哪里 ε 表示独立同分布噪声过程。在连续时间设置中,该模型可以写为: …

VS上配置docker步骤记录

1:VS里安装Remote Development 2:运行 sudo usermod -aG docker $USER。#将当前用户添加到docker用户组中 sudo newgrp docker#更新,运行这个切到了root用户,获取权限 docker ps #列出正在运行的容器。它会显示容器的相关信息&#xff0c;如容器ID、镜像名称、创建时间、状态…

Linux 用户名称高亮和最近路径显示

1、通常情况下&#xff0c;Linux中的路径名称会不断叠加显示&#xff0c;如下图&#xff0c;这样看起来会很长。 2、为了设置路径只是当前最近的文件路径&#xff0c;先进入自己的家目录&#xff0c;然后进入.bashrc&#xff1a; 3、在.bashrc文件中的最后一行加入以下内容…

C# int[,] 和 int[,,]

如标题&#xff1b; 在C#中这两个是定义二维和三维数组的&#xff1b;这和C语言的写法不同&#xff1b; C语言定义二维数组是&#xff0c; int a[5][3]; 看下C#的多维数组&#xff1b;输出数组其中一个值&#xff1b; using System;class Program {static void Main(string[…