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

【威锋网-注册安全分析报告-无验证方式导致安全隐患】

前言

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

1. 暴力破解密码,造成用户信息泄露

2. 短信盗刷的安全问题,影响业务及导致用户投诉

3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞

在这里插入图片描述

所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析

一、 威锋网PC 注册入口

简介: 威锋网自建立之日起一直是人气中文iPhone社区,给广大iPhone爱好者提供了一个自由交流,探讨,学习的平台,为iPhone在中国的应用及普及发挥了领军作用。

在这里插入图片描述

二、 安全性分析报告:

前端界面分析,威锋网未采取任何验证措施,存在验证的安全隐患,同行一般会在注册下发短信验证码时采用图形验证、行为验证方式。

在这里插入图片描述

三、 测试方法:

1 模拟器交互部分

private final String INDEX_URL = "https://www.feng.com/";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {try {RetEntity retEntity = new RetEntity();driver.get(INDEX_URL);Thread.sleep(1000);driver.findElement(By.xpath("//a[text()='注册']")).click();WebElement nameElemet = driver.findElement(By.xpath("//input[@placeholder='请输入用户名']"));nameElemet.sendKeys("top_" + phone);// 输入手机号WebElement phoneElemet = driver.findElement(By.xpath("//input[@placeholder='请输入手机号']"));phoneElemet.sendKeys(phone);// 点击发送验证码按钮WebElement sendElemet = driver.findElement(By.xpath("//div/span[text()='获取验证码']"));if (sendElemet != null)sendElemet.click();Thread.sleep(1);WebElement exitsElement = ChromeDriverManager.waitElement(driver, By.className("ivu-message-notice-content-text"), 15);String exitsInfo = (exitsElement != null) ? exitsElement.getText() : null;if (exitsInfo != null) {System.out.println("phone=" + phone + ",exitsInfo=" + exitsInfo);retEntity.setMsg(exitsInfo);retEntity.setRet(0);return retEntity;}Thread.sleep(1000);WebElement gtElemet = ChromeDriverManager.waitElement(driver, By.xpath("//div/span[@class='count']"), 5);String gtInfo = (gtElemet != null) ? gtElemet.getText() : null;retEntity.setMsg(gtInfo);if (gtInfo != null && gtInfo.contains("重新获取")) {retEntity.setRet(0);} else {System.out.println("gtInfo=" + gtInfo);}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 测试结果输出,测试中发现,如果手机号已注册,会直接提示该手机号已注册

在这里插入图片描述

  由于碰到严重设计缺陷,本次测评非常简单

附早期的代码,采用的行为验证:


@Overridepublic RetEntity reg(CloseableHttpClient httpclient, CookieStore cookieStore, Hashtable<String, String> input, String phone) {RetEntity retEntity = new RetEntity();System.setProperty("webdriver.chrome.driver", OCRUtil.chromePath + File.separator + "chromedriver.exe");WebDriver driver = new ChromeDriver();try {driver.get(INDEX_URL);// 输入手机 号 密码 确认密码WebElement inputPhoneElemet = driver.findElement(By.xpath("//input[@name='phone_number']"));inputPhoneElemet.sendKeys(phone);// 获取验证码点击按钮[a id=validation_code]By getCodeBtn = By.cssSelector("#validation_code");WebElement getCodeElemet = driver.findElement(getCodeBtn);getCodeElemet.click();sleep(2000);// 点球点By moveBtn = By.cssSelector(".feng_captcha_block_piece.feng_captcha_slider_piece");WebElement moveElemet = driver.findElement(moveBtn);// 移动距离点(左门柱)int[][] distance = getMoveDistance(driver, WeiFeng.class.getSimpleName(), phone);// 移动move(driver, moveElemet, distance);retEntity.setRet(0);return retEntity;} catch (Exception e) {logger.error(e.toString());retEntity.setRet(-1);return retEntity;} finally {driver.quit();delImg(WeiFeng.class.getSimpleName(), phone);// 删除图片}}
/*** 移动 三次* * @param driver* @param element* @param distance* @throws InterruptedException*/private static void move(WebDriver driver, WebElement element, int[][] distance) throws InterruptedException {Actions actions = new Actions(driver);for (int i = 2; i >= 0; i--) {actions.clickAndHold(element).perform();// 按住鼠标左键不释放int moveX = (distance[0][0] + 68 * i - 270) / 2;int moveY = distance[1][0] + 34 * 2 - 500;Thread.sleep(500 + new Random().nextInt(700));actions.moveByOffset(moveX, moveY).perform();// 移动Thread.sleep(300 + new Random().nextInt(300));actions.release(element).perform();// 释放鼠标左键}}/*** 计算需要平移的距离* * @param driver* @return* @throws IOException*/public static int[][] getMoveDistance(WebDriver driver, String spCode, String phone) throws IOException {String imgPrefix = spCode + phone;String pageSource = driver.getPageSource();String fullImageUrl = getFullImageUrl(pageSource);FileUtils.copyURLToFile(new URL(fullImageUrl), new File(basePath + "result/" + imgPrefix + FULL_IMAGE_NAME + ".jpg"));initMoveArray(driver);// 把两张图片剪切后拼接还原restoreImage(imgPrefix + FULL_IMAGE_NAME);BufferedImage fullBI = ImageIO.read(new File(basePath + "result/" + imgPrefix + FULL_IMAGE_NAME + "result3.jpg"));for (int j = fullBI.getHeight() / 2; j > fullBI.getHeight() / 3; j--) {for (int i = 0; i < fullBI.getWidth(); i++) {int[] fullRgb = new int[3];fullRgb[0] = (fullBI.getRGB(i, j) & 0xff0000) >> 16;fullRgb[1] = (fullBI.getRGB(i, j) & 0xff00) >> 8;fullRgb[2] = (fullBI.getRGB(i, j) & 0xff);if ((fullRgb[0] >= 38 && fullRgb[0] <= 77) && (fullRgb[1] >= 38 && fullRgb[1] <= 77) && (fullRgb[2] >= 38 && fullRgb[2] <= 77)) {int[][] pos = new int[2][1];pos[0][0] = i;pos[1][0] = j;return pos;}}}throw new RuntimeException("未找到需要平移的位置");}/*** 获取move数组* * @param driver*/private static void initMoveArray(WebDriver driver) {Document document = Jsoup.parse(driver.getPageSource());Elements elements = document.select("[class=feng_captcha_image_wrap]").first().children();int i = 0;for (Element element : elements) {Pattern pattern = Pattern.compile(".*background:.*&quot;\\)(.*?)px (.*?)px.*");Matcher matcher = pattern.matcher(element.toString());if (matcher.find()) {String width = matcher.group(1);String height = matcher.group(2);moveArray[i][0] = Integer.parseInt(width.trim());moveArray[i++][1] = Integer.parseInt(height.trim());} else {throw new RuntimeException("解析异常");}}}/*** 还原图片* * @param type*/private static void restoreImage(String type) throws IOException {// 把图片裁剪为2 * 10for (int i = 0; i < 20; i++) {ImageIOHelper.cutPic(basePath + "result/" + type + ".jpg", basePath + "result/" + type + i + ".jpg", -moveArray[i][0], -moveArray[i][1], 54, 250);}// 拼接图片String[] b = new String[10];for (int i = 0; i < 10; i++) {b[i] = String.format(basePath + "result/" + type + "%d.jpg", i);}ImageIOHelper.mergeImage(b, 1, basePath + "result/" + type + "result1.jpg");// 拼接图片String[] c = new String[10];for (int i = 0; i < 10; i++) {c[i] = String.format(basePath + "result/" + type + "%d.jpg", i + 10);}ImageIOHelper.mergeImage(c, 1, basePath + "result/" + type + "result2.jpg");ImageIOHelper.mergeImage(new String[] { basePath + "result/" + type + "result1.jpg", basePath + "result/" + type + "result2.jpg" }, 2, basePath + "result/" + type + "result3.jpg");// 删除产生的中间图片for (int i = 0; i < 20; i++) {new File(basePath + "result/" + type + i + ".jpg").delete();}new File(basePath + "result/" + type + "result1.jpg").delete();new File(basePath + "result/" + type + "result2.jpg").delete();}public void delImg(String spCode, String phone) {File dirFile = new File(basePath + "result/");if (!dirFile.exists()) {logger.debug("文件目录不存在:" + basePath + "result/");return;}File[] files = dirFile.listFiles();String prefix = spCode + phone;for (File file : files) {if (file.getName().startsWith(prefix)) {file.delete();}}}/*** 从后台源码中获取原始图,然后转换成URL返回* * @param pageSource* @return*/private static String getFullImageUrl(String pageSource) {String url = null;String divStr = null;Document document = Jsoup.parse(pageSource);Elements select = document.select("[class=feng_captcha_image_wrap]");String style = select.html();if (style != null) {divStr = style.substring(0, style.indexOf("</div>"));}if (divStr != null) {int beginIndex = divStr.indexOf("&quot;") + 6;int endIndex = divStr.lastIndexOf("&quot;");url = divStr.substring(beginIndex, endIndex);}return url;}

二丶结语

威锋网作为IPHONE 在国内知名的媒体公司, 具有很高的人气和影响力,之前测试时记得好像是采用网易易盾的验证方式,在最近测试不知道为何去掉了, 是因为没钱了还是对安全的不重视,总之,测试结果就是随便你怎么攻击都可以,这也有点太开发了, 短信验证码难道不要钱吗 ? 这对黑客来说肯定是好消息, 弄个简单的脚本就可以搞定

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

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

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

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

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

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

相关文章:

【威锋网-注册安全分析报告-无验证方式导致安全隐患】

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

01_React简介、基础入门

React 简介、基础入门 一、React 简介1、是什么&#xff1f;2、谁开发的&#xff1f;3、为什么要学&#xff1f;4、React 的特点5、学习 React 之前你要掌握的 Javascript 基础知识 二、React 入门1、相关 js 库2、Hello React 入门小例子---React16.8.0 版本3、为什么不用 js …...

【Java 内存区域】

Java内存区域 JDK1.7 VS JDK1.8堆 (Heap)方法区 (Method Area)String 常量池 (String Pool)运行时常量池 (Runtime Constant Pool)虚拟机栈 (JVM Stack)局部变量表操作数栈动态链接方法返回信息 本地方法栈 (Native Method Stack)程序计数器 (Program Counter Register)元空间 …...

你是如何克服编程学习中的挫折感的?

一&#xff1a;学习之路 在编程学习的过程中&#xff0c;挫折和挑战是不可避免的。面对这些困难&#xff0c;我个人的一些经验和方法如下&#xff0c;或许能为你提供一些启示&#xff1a; 1. 学会分解问题 当遇到复杂的算法或者Bug时&#xff0c;我会将问题分解成更小的部分。…...

【AI应用实战】灵办AI插件集成详细指南

一、写在前面 随着AI技术的日新月异&#xff0c;大型模型应用如雨后春笋般涌现&#xff0c;从ChatGPT到文心一言&#xff0c;再到讯飞星火&#xff0c;无一不彰显着智能科技的无限潜力。而在这股浪潮中&#xff0c;我们欣喜地发现&#xff0c;一些创新的浏览器插件正悄然兴起&a…...

MySQL数据库连接超时问题排查报告

1、问题描述 边端设备访问云端过程中有概率出现MySQL数据库连接超时报错&#xff0c;具体报错代码如下&#xff1a; [2024-08-13 13:47:44,036] ERROR in app: Exception on /est-tasks/start [POST] Traceback (most recent call last): File "/usr/local/lib/python3.1…...

代码随想录第三天 | 链表

文章目录 链表理论知识定义链表删除链表 Leetcode203 移除链表元素代码实现 Leetcode707 设计链表代码实现复杂度分析错误点 Leetcode206 反转链表新建链表双指针法 链表理论知识 链接: https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.h…...

Python编码系列—Python数据可视化:Matplotlib与Seaborn的实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

putty中修改默认窗口大小和字体、字号

在WinSCP中调用putty&#xff0c;发现默认窗口太小&#xff0c;字号也很小&#xff0c;非常不友好。现在显示器都是1080p起步&#xff0c;所以很有必要修改之。 以中文版v0.70为例&#xff0c;方法&#xff1a; 1. 点击左上角图标 &#xff0c;选择下拉菜单中的“修改设置”&…...

Windows下网络编与ESP8266-WiFi通信(win32-API)

一、前言 络编程是指编写程序使不同计算机之间能够通过网络进行通信和数据交换。网络编程涉及使用网络协议和编程接口来建立、管理和终止网络上的数据通信。在这一领域中&#xff0c;TCP/IP协议族是核心组成部分&#xff0c;尤其TCP&#xff08;传输控制协议&#xff09;是面向…...

【Golang】golang安装一些依赖包时总是失败

Golang安装一些依赖包失败&#xff1a; 比如安装gin包&#xff1a;go get -u github.com/gin-gonic/gin 可能会报错&#xff1a;连接网络失败、超时等 这时可能需要修改go的环境配置&#xff0c;修改代理即可&#xff1a; go env -w GO111MO…...

ubuntu如何监控Xvfb虚拟显示器

在Ubuntu中监控Xvfb显示器主要涉及到使用VNC服务器来远程访问这个环境。以下是一些基本步骤&#xff1a; 安装Xvfb和相关工具: 使用apt安装Xvfb和x11vnc&#xff0c;x11vnc是一个VNC服务器&#xff0c;可以远程访问Xvfb创建的虚拟桌面环境。 sudo apt-get install xvfb sudo ap…...

小型需求管理软件盘点:8款功能强大的工具

本文介绍了以下8款工具&#xff1a;PingCode、Worktile、易得云、Ping、燃草、Gitee、Monday.com、Slack。 在现代企业管理中&#xff0c;需求管理一直是个让人头疼的问题&#xff0c;特别是对于小型企业来说&#xff0c;选择一款合适的需求管理软件往往比想象中更复杂。如果选…...

Labelme的安装与使用教程

文章目录 一、Labelme是什么&#xff1f;二、安装步骤1.新建虚拟环境2.安装Labelme3.Labelme的使用 三、json2yolo 一、Labelme是什么&#xff1f; Labelme是一个用于图像标注的开源工具&#xff0c;可以实现图像标注、语义分割、实例分割等。 本文记录一下labelme的安装与使…...

C#基础:数据库中使用Linq作分组处理(反射/直接分组)

目录 一、使用反射分组 二、不使用反射分组 三、调用示例 四、代码demo 一、使用反射分组 private static List<GroupList<T>> GetGroupList<T>(List<T> entities, string groupByProperty) {// 获取分组字段的类型var propertyInfo typeof(T).…...

Revite二次开发_使用WPF和WebView2制作一个访问网站的窗口

如果想在revit里打开网页&#xff0c;可以使用WebView2来实现&#xff0c;下面是一个代码示例。 也尝试过使用CefSharp&#xff0c;但由于Revit本身也使用了CefSharp&#xff0c;所以需要根据不同的Revit版本选择适合的CefSharp版本&#xff0c;比较麻烦&#xff0c;所以最好还…...

Java Spring Boot 连接数据库

要在Java Spring Boot应用程序中连接数据库&#xff0c;您需要遵循以下步骤&#xff1a; 1. 添加数据库依赖项&#xff1a;在您的Spring Boot项目中的pom.xml文件中添加数据库依赖项&#xff0c;例如MySQL或PostgreSQL等。例如&#xff0c;如果您要连接MySQL数据库&#xff0c;…...

Java面试八股之消息队列中推模式和拉模式分别有哪些使用场景

消息队列中推模式和拉模式分别有哪些使用场景 消息队列的推模式&#xff08;Push&#xff09;和拉模式&#xff08;Pull&#xff09;各有不同的使用场景和优缺点。下面我会详细介绍这两种模式及其适用场景&#xff1a; 推模式&#xff08;Push&#xff09; 特点&#xff1a;…...

springboot jar是如何启动的

我们先来看一个项目的打完包后的MANIFEST.MF文件&#xff1a; Manifest‐Version: 1.0 Implementation‐Title: spring‐learn Implementation‐Version: 0.0.1‐SNAPSHOT Start‐Class: com.tulingxueyuan.Application Spring‐Boot‐Classes: BOOT‐INF/classes/ Spring‐Bo…...

Android 12系统源码_屏幕设备(二)DisplayAdapter和DisplayDevice的创建

前言 在Android 12系统源码_屏幕设备&#xff08;一&#xff09;DisplayManagerService的启动这篇文章中我们具体分析了DisplayManagerService 的启动流程&#xff0c;本篇文章我们将在这个的基础上具体来分析下设备屏幕适配器的创建过程。 一、注册屏幕适配器 系统是在Disp…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...