【亿美软通-注册/登录安全分析报告】

前言

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

  1. 暴力破解密码,造成用户信息泄露
  2. 短信盗刷的安全问题,影响业务及导致用户投诉
  3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞
    在这里插入图片描述
    所以大部分网站及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的训练部署套件》

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

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

相关文章

14.面试算法-字符串常见算法题(三)

1. 字符串回文问题 1.1 LeetCode.125. 验证回文串 回文问题在链表中是重点&#xff0c;在字符串中同样是个重点。当初我去美团面试第一轮技术面的第一个算法题就是让写判断字符串回文的问题。 这个本身还是比较简单的&#xff0c;只要先转换成字符数组&#xff0c;然后使用双…

OctoSQL 查询大量数据库和文件格式

OctoSQL 主要是一款 CLI 工具&#xff0c;可让你通过统一界面使用 SQL 查询大量数据库和文件格式&#xff0c;甚至在它们之间进行连接。同时&#xff0c;它还是一个易于扩展的完整数据流引擎&#xff0c;你可以用它为自己的应用程序添加 SQL 接口 OctoSQL是一款功能强大的SQL查…

Git从了解到操作

Git常用命令 基本的linux命令 ls / ll 查看当前目录( ls 是查看目录有哪些文件夹&#xff0c;ll 是查看隐藏文件)cat 查看文件内容touch 创建文件vi vi编辑器 (使用 vi 编辑器是为了方便展示效果&#xff0c;也可以记事本、editPlus、notPad等其它编辑器) 备注 Git GUl: Gi…

docker基本(仅供自己参考)

一、大型项目部署的问题&#xff1a; 1、大型项目的组件比较多&#xff0c;运行环境很复杂&#xff0c;部署通常会遇到各种问题&#xff1a; &#xff08;1&#xff09;&#xff1a;依赖关系复杂&#xff0c;容易出现兼容性问题 &#xff08;2&#xff09;&#xff1a;开发、…

雪花算法Snowflake

雪花算法常用于分布式的项目中&#xff0c;是为了解决大数据产生的多表分表中&#xff0c;保证id的唯一性。 1.分布式的特点 全局唯一性&#xff1a;不能出现有重复ID的标识&#xff1b;地增性&#xff1a;确保生成的ID对用于用户或业务是递增的&#xff1b;高可用性&#xf…

施耐德EcoStruxure Machine SCADA Expert(EMSE)与SQL数据库连接(十五)

我习惯使用SQL Server 数据库与EMSE进行连接。 用的是sql 2017 关于数据库软件的安装教程 网上一大把。 1.新建数据库 打开数据库管理工具&#xff0c;新建数据库 2.新建表单 &#xff08;ps:这里先做一个小测试-----目的是验证与EMSE软件的链接是否顺畅。) 添加两个元素进去…

flask的学习记录

结构如下&#xff1a; app.py from App import create_appapp create_app()if __name__ __main__:app.run(debugTrue,host0.0.0.0,port5000) App/__init__.py from flask import Flask, render_template, request, redirect, url_for from .views import blue from .exts …

VisualPromptGFSS

COCO-20 i ^i i太大&#xff0c;不建议复现

golang学习笔记1-go程序执行流程

声明&#xff1a;本人已有C&#xff0c;C,Python基础&#xff0c;只写本人认为的重点&#xff0c;方便自己回顾。 命令行执行go程序有两种方式&#xff0c;其流程如下图 注意第一种方式会得到可执行文件&#xff0c;第二种不会。 例1 在当前目录下编译hello.go go build hel…

TypeScript入门 (三)数据类型

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文旨在全面介绍 TypeScript 中的各种数据类型&#xff0c;帮助读者深入理解每种数据类型的用法、内置属性…

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 &#xff08;1&#xff09;在Solver选项卡中可以设置仿真的起始时间和结束时间&#xff0c;一般起始时间设为0&#xff0c;而结束时间按需设置。 &#xff08;2&#xff09;如果希望仿真不会自动暂停&#xff08;也就…

Qwen大型语言模型系列的最新成果 ----Qwen2.5

通义千问2.5-7B-Instruct-GGUF 模型库 (modelscope.cn) apt install git-lfsgit lfs installgit clone https://www.modelscope.cn/qwen/Qwen2.5-7B-Instruct-GGUF.git

(done) 声音信号处理基础知识(3) (一个TODO: modulation 和 timbre 的关联)(强度、响度、音色)

来源&#xff1a;https://www.youtube.com/watch?vJkoysm1fHUw sound power 通常可以被认为是能量传输的速率 声源往所有方向传输的每时间单位能量 用 瓦特(W) 作为单位测量 Sound intensity 声音强度&#xff0c;每单位面积的 sound power W/m^2 人类实际上能听到非常小强…

Mybatis+Druid+MybatisPlus多数据源配置

MybatisDruidMybatisPlus多数据源配置 平常我们使用的是 properties 或者 yaml 来配置数据库的地址、用户名、密码等 但是这样只能配置一个数据源 现在我们想在一个项目里面配置多个数据源&#xff0c;那么我们就需要配置自己的配置类 配置类和配置文件 Mybatismysqldruid配置…

此框架你到底了解多少???

1.简述对Spring中IOC/DI的理解 IOC&#xff1a;控制反转&#xff0c;将创建和管理的对象的任务交给外部的Spring容器 DI&#xff1a;依赖注入&#xff0c;对象之间存在依赖关系&#xff0c;创建对象时&#xff0c;对其依赖的对应直接进行赋值 2.有哪些依赖注入的方式 基于注…

在线教程丨1 步生成 SOTA 级别图像,Hyper-SD 一键启动教程上线!

近年来&#xff0c;扩散模型在文生图任务中得到了广泛的应用&#xff0c;但其在实现高质量图像生成的过程中&#xff0c;通常需要多步推理进行去噪&#xff0c;这显然大大增加了计算资源成本。 针对于此&#xff0c;研究人员引入蒸馏算法&#xff0c;推出了扩撒感知蒸馏算法来…

超实用的 Typora 插件

&#x1f33c;&#x1f4da;Typora 是一款高效、易用且跨平台的 Markdown 编辑器和阅读器&#xff0c;其具有小巧、快速、实时预览等特点&#xff0c;非常受大家的欢迎。今天给大家推荐一款如虎添翼的 Typora 插件(Typora Plugin)&#xff0c;它可以通过插件增强 Typora 的功能…

什么是调制?FM 和 AM 有什么区别?

来源&#xff1a;https://www.bilibili.com/video/BV1pp411d7Zg/?spm_id_fromautoNext&vd_source7a1a0bc74158c6993c7355c5490fc600 一张图说明一切 原因&#xff1a;低频信号传输距离很近&#xff0c;高频信号传输距离较远。 为了把低频信号传出去&#xff0c;需要把低…

【数据结构C语言】【入门】【首次万字详细解析】入门阶段数据结构可能用到的C语言知识,一章让你看懂数据结构!!!!!!!

前言&#xff1a;欢迎各位光临本博客&#xff0c;这里小编带你直接手撕入门阶段的数据结构的C语言知识&#xff0c;让你不再看见数据结构就走不动道。文章并不复杂&#xff0c;愿诸君耐其心性&#xff0c;忘却杂尘&#xff0c;道有所长&#xff01;&#xff01;&#xff01;&am…

图片马赛克处理(Java)

1.需求 给图片的指定区域打码给整张图片打码马赛克方格取色支持中心点取色和随机取色马赛克支持灰度处理 2.源码 package com.visy.utils;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOE…