【齐家网-注册/登录安全分析报告】

news2024/11/13 9:26:10

前言

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

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

一、 齐家网PC 注册入口

简介:齐家网成立于2007年,创始人邓华金,员工超1000人。2018年7月12日,齐家网母公司齐屹科技成功登陆港交所主板(股票代码1739.HK)。
自成立以来,齐家网秉承“用户为先”理念,以提升行业效率和用户极致体验为己任,不断创新发展,深度打造融合线上线下的家装新模式,为家装用户提供更低价格、更高品质和更好服务的装修解决方案, 是用户在互联网寻求家装服务的优选平台。
齐家网业务涵盖家装平台、自营装修业务、齐家特许经营网络、供应链等多个子生态。目前,齐家网已经建立了一个蓬勃发展的生态体系,聚集超过7500家优质装修服务商。

在这里插入图片描述

二丶 安全分析:

采用传统的图形验证码方式,具体为4个数字英文,ocr 识别率在 95% 以上。

测试方法:
采用模拟器+OCR识别

1. 模拟器交互



	private static String INDEX_URL = "https://passport.jia.com/cas/login?service=https://i.jia.com/&app_id=500";

	@Override
	public RetEntity send(WebDriver driver, String areaCode, String phone) {
		RetEntity retEntity = new RetEntity();
		try {
			driver.get(INDEX_URL);

			driver.findElement(By.xpath("//a[@class='agree_yes']")).click();

			// 1 输入手机号
			WebElement phoneElemet = ChromeDriverManager.waitElement(driver, By.id("partnerPhone"), 1);
			phoneElemet.sendKeys(phone);

			// 获取验证码
			WebElement sendElement = driver.findElement(By.id("smsSendButton"));
			sendElement.click();

			// 同意并继续
			Thread.sleep(1 * 1000);
			driver.findElement(By.xpath("//a[@class='yes']")).click();

			// 2 获取图形验证码
			Thread.sleep(1 * 1000);
			String imgCode = null, imgUrl;
			byte[] imgByte = null;
			WebElement imgElement = driver.findElement(By.id("captchaImage"));
			for (int i = 0; i < 3; i++) {
				imgUrl = imgElement.getAttribute("src");
				imgByte = (imgUrl != null) ? GetImage.callJsByUrl(driver, imgUrl) : null;
				int len = (imgByte != null) ? imgByte.length : 0;
				imgCode = (len > 0) ? ddddOcr.getImgCode(imgByte) : null;
				boolean rcode = (imgCode != null && imgCode.length() >= 4) ? DigitFormat.isRcode(imgCode) : false;
				if (rcode)
					break;
				imgElement.click();
				Thread.sleep(1 * 1000);
			}

			if (imgCode == null || imgCode.length() < 4) {
				System.out.println("imgCode=" + imgCode);
				return retEntity;
			}

			// 3 输入识别出来的图形验证码
			WebElement codeInputElement = driver.findElement(By.id("smsCaptcha"));
			codeInputElement.sendKeys(imgCode);

			// 4 点击下一步
			Thread.sleep(1 * 1000);
			WebElement getCodeElement = ChromeDriverManager.waitElement(driver, By.xpath("//a[@class='submit']"), 20);
			if (getCodeElement != null) {
				getCodeElement.click();
				Thread.sleep(1 * 1000);
			}

			Thread.sleep(1500);
			String gtInfo = sendElement.getText();
			retEntity.setMsg("[imgCode:" + imgCode + "]->" + gtInfo);

			if (gtInfo != null && gtInfo.contains("秒后重新发送")) {
				retEntity.setRet(0);
				ddddOcr.saveFile("Jia", imgCode, imgByte);
				return retEntity;
			} else {
				System.out.println("gtInfo=" + gtInfo);
				ddddOcr.saveFile("Jia/err/", imgCode, imgByte);
			}
			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 {
			if (driver != null)
				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.图形验证码识别(Ddddocr)


public String getImgCode(byte[] bigImage) {
		try {
			if (ddddUrl == null) {
				System.out.println("ddddUrl=" + ddddUrl);
				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(ddddUrl);

			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();

			if (bigImage != null && bigImage.length > 0) {
				out.write(boundarybytesString.getBytes("UTF-8"));
				String 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("ddddUrl=" + ddddUrl + " ret=" + buffer.toString());
			}
			return buffer.toString();
		} catch (Throwable e) {
			logger.error("ddddUrl=" + ddddUrl + ",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. 测试返回结果:

在这里插入图片描述

三 丶测试报告 :

在这里插入图片描述

四丶结语

齐家网成立于2007年,创始人邓华金,员工超1000人。2018年7月12日,齐家网母公司齐屹科技成功登陆港交所主板(股票代码1739.HK)。
自成立以来,齐家网秉承“用户为先”理念,以提升行业效率和用户极致体验为己任,不断创新发展,深度打造融合线上线下的家装新模式,为家装用户提供更低价格、更高品质和更好服务的装修解决方案, 是用户在互联网寻求家装服务的优选平台。
齐家网业务涵盖家装平台、自营装修业务、齐家特许经营网络、供应链等多个子生态。目前,齐家网已经建立了一个蓬勃发展的生态体系,聚集超过7500家优质装修服务商,作为头部的家装无提供商, 技术实力也应该不错,但采用的还是老一代的图形验证码已经落伍了, 用户体验一般,容易被破解, 一旦被国际黑客发起攻击,将会对老百姓形成骚扰,影响声誉。

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

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

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

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

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

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

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

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

相关文章

利用教育和参与的力量来推动你的应用程序的成功

在竞争激烈的应用推广领域&#xff0c;脱颖而出需要的不仅仅是华丽的广告和充满活力的视觉效果。真正吸引和留住用户的秘诀在于两个经常被忽视但非常强大的策略&#xff1a;教育和参与。如果做得对&#xff0c;这些元素可以将你的应用程序从单纯的下载转变为用户生活中必备的工…

安泰电压放大器设计方法是什么样的

电压放大器是电子领域中常用的设备&#xff0c;用于将低电压信号放大成高电压信号。电压放大器在信号处理、通信系统、仪器测量、控制系统、医疗设备和研究和实验室等领域都有着广泛的应用。 电压放大器的设计方法主要包括选择合适的放大器拓扑结构、选择适当的放大器参数以及进…

基于 UniApp 平台的学生闲置物品售卖小程序设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

(已解决)vscode如何选择python解释器

文章目录 前言解决方案 前言 有的时候可能有不同版本的编译器&#xff0c;以适用不同年份的项目。所以&#xff0c;怎么在vscode中换python解释器呢&#xff1f; 解决方案 对着要运行的python文件进行右键&#xff0c;比如我是要运行main文件&#xff0c;点击那个命令选项版…

基于区块链的相亲交易系统源码解析

随着区块链技术的成熟与发展&#xff0c;其去中心化、不可篡改的特性逐渐被应用于各行各业。特别是在婚恋市场中&#xff0c;区块链技术的应用为相亲平台带来了新的可能性 。本文将探讨如何利用区块链技术构建一个透明、高效的相亲交易系统&#xff0c;并提供部分源码示例。 区…

OpenCV运动分析和目标跟踪(4)创建汉宁窗函数createHanningWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 此函数计算二维的汉宁窗系数。 createHanningWindow是OpenCV中的一个函数&#xff0c;用于创建汉宁窗&#xff08;Hann window&#xff09;。汉宁…

Prompt最佳实践|指定输出的长度

在OpenAI的官方文档中已经提供了[Prompt Enginerring]的最佳实践&#xff0c;目的就是帮助用户更好的使用ChatGPT 编写优秀的提示词我一共总结了9个分类&#xff0c;本文讲解第6个分类&#xff1a;指定输出长度 提供更多的细节要求模型扮演角色使用分隔符指定任务步骤提供样例…

翻页时钟 2.0-自动置顶显示,点击小时切换显示标题栏不显示标题栏-供大家学习研究参考

更新内容 自动置顶显示点击小时切换显示标题栏&#xff0c;&#xff08;显示标题栏后可移动时钟位置&#xff0c;鼠标拖动边框调整时钟大小&#xff09;不显示标题栏时&#xff0c;透明部分光标可穿透修正一个显示bu 下载地址&#xff1a; https://download.csdn.net/download…

24年蓝桥杯及攻防世界赛题-MISC-2

11 Railfence fliglifcpooaae_hgggrnee_o{cr} 随波逐流编码工具 分为5栏时,解密结果为:flag{railfence_cipher_gogogo} 12 Caesar rxms{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz} mode1 #12: flag{you_have_learned_caesar_encryption} 随波逐流编码工具 13 base64 base64解…

powerbi如何修改卡片单位?

第一步&#xff1a;找到视觉对象--标注值 第二步&#xff1a;找到显示单位修改即可&#xff01;

谷歌论文提前揭示o1模型原理:AI大模型竞争或转向硬件

Open AI最强模型o1的护城河已经没有了&#xff1f;仅在OpenAI发布最新推理模型o1几日之后&#xff0c;海外社交平台 Reddit 上有网友发帖称谷歌Deepmind在 8 月发表的一篇论文内容与o1模型原理几乎一致&#xff0c;OpenAI的护城河不复存在。 谷歌DeepMind团队于今年8月6日发布…

服务监控插件全览:提升微服务可观测性的利器

Datadog 1. 概述与背景 简介&#xff1a;Datadog 是一个云监控和分析平台&#xff0c;它提供全面的监控解决方案&#xff0c;包括性能监控、故障排查、资源利用率优化等。Datadog 适用于各种规模的分布式系统&#xff0c;包括微服务架构、大数据平台、云原生应用等。目的&…

CSS的三种基本选择器

使用CSS控制网页格式有行内法&#xff0c;内嵌式&#xff0c;链接式&#xff0c;导入式等方法 这里将采用内嵌式的方法书写 内嵌法就是通过<style>标记将样式定义在HTML的文件头部中 1.标记选择器 标记选择器特点&#xff1a;定义了标记选择器之后&#xff0c;网页中…

Leetcode 93-复原 IP 地址

有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.255.245”、“192.168.…

一问详解Unity下RTMP推送|轻量级RTSP服务|RTSP|RTMP播放模块说明

技术背景 好多开发者&#xff0c;对Unity下的模块&#xff0c;不甚了解&#xff0c;实际上&#xff0c;除了Windows/Linux/Android/iOS Native SDK&#xff0c;大牛直播SDK发布了Unity环境下的RTMP推流|轻量级RTSP服务&#xff08;Windows平台Linux平台Android平台&#xff09…

行人持刀检测数据集 voc yolo

行人持刀检测数据集 9000张 持刀检测 带标注 voc yolo 行人持刀检测数据集 数据集描述 该数据集旨在用于行人持刀行为的检测任务&#xff0c;涵盖了多种场景下的行人图像&#xff0c;特别是那些携带刀具的行人。数据集包含大量的图像及其对应的标注信息&#xff0c;可用于训练…

【ShuQiHere】 探索数据挖掘的世界:从概念到应用

&#x1f310; 【ShuQiHere】 数据挖掘&#xff08;Data Mining, DM&#xff09; 是一种从大型数据集中提取有用信息的技术&#xff0c;无论是在商业分析、金融预测&#xff0c;还是医学研究中&#xff0c;数据挖掘都扮演着至关重要的角色。本文将带您深入了解数据挖掘的核心概…

记录一题----计算机网络传输层

线路&#xff1a;TCP报文下放到物理层传输。 TCP报文段中&#xff0c;“序号”长度为32bit&#xff0c;为了让序列号不会循环&#xff0c;则最多能传输2^32B的数据&#xff0c;则最多能传输&#xff1a;2^32/1500B个报文 结果&#xff1a; 吞吐率一个周期内传输的数据/周期时间…

使用Webpack创建vue脚手架并搭建路由---详解

1.使用 vue 库 vue 是一个非常好用的 javascript 库&#xff0c;现在已经发行了 vue 3&#xff0c;我们可以直接导入使用库文件&#xff0c;也可以使用单文件&#xff08;SFC&#xff09;的形式&#xff0c;直接使用库文件会简单一点&#xff0c;我们先来试一下吧。 1.1安装 v…

探索AutoIt:自动化任务的Python魔法棒!

文章目录 探索AutoIt&#xff1a;自动化任务的Python魔法棒&#xff01;背景&#xff1a;为什么选择AutoIt&#xff1f;AutoIt库简介安装AutoIt库简单的库函数使用方法场景应用常见Bug及解决方案总结 探索AutoIt&#xff1a;自动化任务的Python魔法棒&#xff01; 背景&#x…