【亿美软通-注册/登录安全分析报告】
前言
由于网站注册入口容易被黑客攻击,存在如下安全问题:
- 暴力破解密码,造成用户信息泄露
- 短信盗刷的安全问题,影响业务及导致用户投诉
- 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞
所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析
一、 亿美软通PC 注册入口
简介:北京亿美软通科技有限公司(BEIJING EMAY SOFTCOM TECHNOLOGY LTD.)是具备国际水准的移动商务平台技术和应用方案提供商。自2001年成立以来,亿美软通始终致力于为国内外企业提供具备国际技术水准的移动商务平台及运营服务。目前,亿美软通已为超过50万家企业提供移动个性客服、移动高效管理等方面的各类移动商务产品和通讯服务,业务服务覆盖超过8亿手机用户。2014年,亿美软通全资并入A股上市公司深圳市银之杰科技股份有限公司(深证A股300085)。
二丶 安全分析:
采用传统的图形验证码方式,具体为6个数字英文,ocr 识别率在 95% 以上。
测试方法:
采用模拟器+OCR识别
1. 模拟器交互
private static String INDEX_URL = "https://www.emay.cn/article964.html";private OcrClientModel ocrClientModel = new OcrClientModel("emay.cn");@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {RetEntity retEntity = new RetEntity();try {driver.get(INDEX_URL);Thread.sleep(1 * 1000);// 输入手机号WebElement phoneElemet = ChromeDriverManager.waitElement(driver, By.id("txtPhone"), 400);phoneElemet.sendKeys(phone);String name = "张三";// 输入姓名WebElement nameElemet = ChromeDriverManager.waitElement(driver, By.id("txtName"), 400);nameElemet.sendKeys(name);// 获取验证码byte[] imgByte = GetImage.callJsById(driver, "imgcodesrc");int len = (imgByte != null) ? imgByte.length : 0;// 调用 ddddOcr 识别图像验证码String imgCode = (len > 10) ? ocrClientModel.getImgCode(imgByte) : null;ocrClientModel.saveFile("Emay", imgCode, imgByte);if (imgCode == null || "".equals(imgCode)) {System.out.println("len=" + len + ",imgCode=" + imgCode);return null;}// 输入验证码WebElement imgCodeElemet = driver.findElement(By.id("verify"));imgCodeElemet.sendKeys(imgCode.toUpperCase());Thread.sleep(1000);// 点击发送验证码WebElement sendCodeElemet = driver.findElement(By.id("smsBtn"));sendCodeElemet.click();Thread.sleep(1000);StringBuffer alertSb = new StringBuffer();boolean isAlert = ChromeDriverManager.isAlertPresent(driver, alertSb);if (isAlert) {// System.out.println("imgCode=" + imgCode + "->" + alertSb);// return retEntity;}// 结果sendCodeElemet = driver.findElement(By.id("smsBtn"));String gtInfo = sendCodeElemet.getText();gtInfo = "59s后重新获取验证码";retEntity.setMsg("[imgCode:" + imgCode + "]->" + gtInfo);if (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. 获取图形验证码
public static byte[] callJsById(WebDriver driver, String id) {return callJsById(driver, id, null);}public static byte[] callJsById(WebDriver driver, String id, StringBuffer base64) {String js = "let c = document.createElement('canvas');let ctx = c.getContext('2d');";js += "let img = document.getElementById('" + id + "'); /*找到图片*/ ";js += "c.height=img.naturalHeight;c.width=img.naturalWidth;";js += "ctx.drawImage(img, 0, 0,img.naturalWidth, img.naturalHeight);";js += "let base64String = c.toDataURL();return base64String;";String src = ((JavascriptExecutor) driver).executeScript(js).toString();String base64Str = src.substring(src.indexOf(",") + 1);if (base64 != null) {base64.append(base64Str);}byte[] vBytes = (base64Str != null) ? imgStrToByte(base64Str) : null;return vBytes;}
3.图形验证码识别(OcrClientModel)
public String getImgCode(byte[] bigImage) {try {if (picUrl == null) {System.out.println("ddddUrl=" + picUrl);return null;}long time = (new Date()).getTime();HttpURLConnection con = null;String boundary = "----------" + String.valueOf(time);String boundarybytesString = "\r\n--" + boundary + "\r\n";OutputStream out = null;URL u = new URL(picUrl);con = (HttpURLConnection) u.openConnection();con.setRequestMethod("POST");con.setConnectTimeout(10000);con.setReadTimeout(10000);con.setDoOutput(true);con.setDoInput(true);con.setUseCaches(true);con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);out = con.getOutputStream();out.write(boundarybytesString.getBytes("UTF-8"));String paramString = "Content-Disposition: form-data; name=\"sp_code\"\r\n\r\n" + spCode;out.write(paramString.getBytes("UTF-8"));if (bigImage != null && bigImage.length > 0) {out.write(boundarybytesString.getBytes("UTF-8"));paramString = "Content-Disposition: form-data; name=\"image\"; filename=\"" + "bigNxt.gif" + "\"\r\n";paramString += "Content-Type: application/octet-stream\r\n\r\n";out.write(paramString.getBytes("UTF-8"));out.write(bigImage);}String tailer = "\r\n--" + boundary + "--\r\n";out.write(tailer.getBytes("UTF-8"));out.flush();out.close();StringBuffer buffer = new StringBuffer();BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));String temp;while ((temp = br.readLine()) != null) {buffer.append(temp);}String ret = buffer.toString();if (ret.length() < 1) {System.out.println("picUrl=" + picUrl + " ret=" + buffer.toString());}return buffer.toString();} catch (Throwable e) {logger.error("picUrl=" + picUrl + ",e=" + e.toString());return null;}}public void saveFile(String factory, String imgCode, byte[] imgByte) {try {String basePath = ConstTable.codePath + factory + "/";File ocrFile = new File(basePath + imgCode + ".png");FileUtils.writeByteArrayToFile(ocrFile, imgByte);} catch (Exception e) {logger.error("saveFile() " + e.toString());}}
4. 图形OCR识别结果:
5. 测试返回结果:
三 丶测试报告 :
四丶结语
北京亿美软通科技有限公司(BEIJING EMAY SOFTCOM TECHNOLOGY LTD.)是具备国际水准的移动商务平台技术和应用方案提供商。自2001年成立以来,亿美软通始终致力于为国内外企业提供具备国际技术水准的移动商务平台及运营服务。目前,亿美软通已为超过50万家企业提供移动个性客服、移动高效管理等方面的各类移动商务产品和通讯服务,业务服务覆盖超过8亿手机用户。2014年,亿美软通全资并入A股上市公司深圳市银之杰科技股份有限公司(深证A股300085)。 技术实力应该不错,但采用的还是老一代的图形验证码已经落伍了, 用户体验一般,容易被破解, 一旦被国际黑客发起攻击,将会对老百姓形成骚扰,影响声誉。
很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。
所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#
戳这里→康康你手机号在过多少网站注册过!!!
谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?
>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》
相关文章:

【亿美软通-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

数据分析学习之学习路线
前言 我们之前通过cda认证了解到数据分析行业,但是获取到证书,并不代表着,我们已经拥有的数据分析的能力,所以通过系统的学习数据分析需要掌握的能力,并学习大佬们的分析经验、分析思路,才是成为数据分析师…...

Oracle逻辑备份脚本【生产环境适用】
1 说明 从Oracle10g开始,引入了数据泵(Data Pump),是一种高效的数据传输工具,它通过导出(Export)和导入(Import)的方式帮助用户迁移数据。 在Oracle的产品设计中&#…...
Python范例总结
一、基础功能 1、操作符 and 拥有更高优先级,会先行运算。优先级顺序为 NOT、AND、OR。 2、列表 1)列表拼接 l1 [1,2,3] l2 [4,5,6]# 方法1 # l1 l1 l2# 方法2 # l1[len(l1):len(l1)] l2# 方法3 l1.extend(l2) print(l1) 3、函数 1)范…...

若依生成主子表
一、准备工作 确保你已经部署了若依框架,并且熟悉基本的开发环境配置。同时,理解数据库表结构对于生成代码至关重要。 主子表代码结构如下(字表中要有一个对应主表ID的字段作为外键,如下图的customer_id) -- ------…...

dotnet4.0编译问题
因为最近在写cobaltstrike的execute-assembly内存加载的c#项目 用visual studio2022编译,最低net只能用6.0版本的,并且execute-assembly不支持 我想使用4.x版本进行编译,因为visual studio不支持,那么使用命令行进行编译 因为要用…...

研一奖学金计划2024/9/23有感
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、需要认真上课的1.应用数理统计(开卷考试)2.最优化方法(开卷考试)3.跨文化交际(主题演讲20课堂讨…...
html知识点框架
一、HTML基础 HTML简介 HTML是一种超文本标记语言,用于创建网页和网页应用。HTML5是公认的下一代Web语言,极大地提升了Web在富媒体、富内容和富应用等方面的能力。HTML基本结构 基本的HTML文档结构包括<!DOCTYPE html>, <html>, <head&g…...

SpringBoot的应用
目录 一、springboot的应用 1、创建springboot项目 2、乱码问题配置 3、springboot日志配置 4、springboot整合mybatis 二、配置文件讲解及测试 1、全局配置文件参数读取 1.1 全局配置文件的位置 1.2 配置文件的读取 1.2.1 导包 1.2.2 编写配置对象Bean 1.2.3 编写配置文件 1.2…...

Spring源码学习:SpringMVC(3)mvcannotation-driven标签解析【RequestMappingHandlerMapping生成】
目录 前言mvc:annotation-driven标签概述mvc:annotation-driven标签解析【RequestMappingHandlerMapping生成】AnnotationDrivenBeanDefinitionParser#parse (解析入口)RequestMappingHandlerMapping的实例化类图afterPropertiesSetAbstractHandlerMetho…...

2024 Redis 全部
1. 单机部署 1.1 检查环境,创建目录。 # 本地运行,不需要考虑安装的原因,可以卸载防火墙 # 关闭防火墙 systemctl stop firewalld.service# 查看防火强状态 firewall-cmd --state# redis 是基于gcc 环境的,查看是否有 gcc 环境 …...
[SDX35+WCN6856]SDX35 + WCN6856 WiFi可以up起来之后无法扫描到SSID
SDX35 SDX35介绍 SDX35设备是一种多模调制解调器芯片,支持 4G/5G sub-6 技术。它是一个4nm芯片专为实现卓越的性能和能效而设计。它包括一个 1.9 GHz Cortex-A7 应用处理器。 SDX35主要特性 ■ 3GPP Rel. 17 with 5G Reduced Capability (RedCap) support. Backward compati…...

VisualStudio如何卸载Resharper插件?
本来按理说,卸载插件应该就是在扩展下的已安装插件中,找到该插件,点一下就会出现卸载的按钮的。 没想到这个Resharper这么吊,卸载按钮居然是个灰色的,意思就是此路不通,有特权的。 那么这种情况下&#x…...

Unity Debug时出现请选择unity实例
Unity Debug时出现请选择unity实例 问题描述 出现请选择unity实例,并且选择框里为空。 出现原因 你打开了两个Unity工程,在附加时,不知道加在哪个Unity工程上。 解决方法 在调试窗口中点击“附加Unity调试程序”,然后在弹出…...

国庆出行新宠:南卡Pro5骨传导耳机,让旅途不再孤单
国庆长假即将来临,对于热爱旅行和户外运动的朋友们来说,一款适合旅行使用的耳机无疑是提升旅途体验的神器。今天,我要向大家推荐一款特别适合国庆出行的耳机——南卡Runner Pro5骨传导耳机。作为一名热爱旅游的体验者,我强烈推荐南…...
2024.09.18 leetcode 每日一题
二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 https://leetcode.cn/problems/add-binary/description/ 代码一,尝试使用笨办法,会造成溢出 class Solution { public:string addBinary(string a, string …...

快递物流短信API接口代码
官网:快递鸟 API参数 用户信息类 一.短信模版 1.接口说明 使用快递鸟短信功能时,预先设置好短信模板和对应的发送规则,快递鸟短信API将根据设置的好的模板和规则,进行短信的发送和反馈。 (1)仅支持Json格式。 (2)请求指令810…...

人工智能-机器学习-深度学习-分类与算法梳理
目前人工智能的概念层出不穷,容易搞混,理清脉络,有益新知识入脑。 为便于梳理,本文只有提纲,且笔者准备仓促,敬请勘误,不甚感激。 请看右边目录索引 。 人工智能 三大派系 符号主义(Symbolists…...
Xinference:深度学习模型推理与优化指南
目录 1. 什么是 Xinference? 2. 使用 Xinference 进行模型推理 2.1 安装 Xinference 2.2 模型推理示例 3. 提高模型推理的效率和性能 3.1 模型量化 3.2 并行处理 3.3 批量处理 4. 启用网页端(如果支持) 5. 在 CPU 中的注意事项 6. …...

Windows 2003系统的防护技巧,禁止IPC$空连接
一、修改管理员帐号和新建“陷阱”帐号 多年以来,微软一直在强调建议重命名Administrator账号并禁用Guest账号,提高计算机的安全性。Windows Server 2003系统,Guest 账号是默认禁用的,管理员账号默认是Administrator,…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...