【北京市政府网_注册安全分析报告】

news2024/12/23 17:01:15

前言

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

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

一、 北京市政府网PC 注册入口

简介:北京市人民政府门户网站——首都之窗(www.beijing.gov.cn)由北京市人民政府办公厅主办,北京市政务服务管理局、北京市经济和信息化局承办,首都之窗运行管理中心负责运行管理。
网站于1998年7月1日正式开通,作为北京市电子政务建设的重要组成部分,是市政府面向社会服务的窗口,是市级各部门和各区政府在互联网上发布政府信息和提供在线服务的综合平台。北京市人民政府门户网站开设“要闻动态、政务公开、政务服务、政民互动、人文北京”等栏目版块,第一时间权威发布市政府重大决策部署和重要政策文件,面向社会提供与政府相关的职能服务,建设基于互联网的政府与公众互动交流新渠道。

在这里插入图片描述

二丶 安全分析:

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

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

1. 模拟器交互


public RetEntity send(WebDriver driver, String areaCode, String phone) {
		RetEntity retEntity = new RetEntity();
		try {
			String INDEX_URL = "https://portal.bjt.beijing.gov.cn/p/register/register.html";
			driver.get(INDEX_URL);
			Thread.sleep(1 * 1000);
			// 1 输入手机号
			WebElement phoneElemet = ChromeDriverManager.waitElement(driver, By.id("mobilePhone"), 1);
			phoneElemet.sendKeys(phone);
			Thread.sleep(1 * 1000);
			// 2 获取图形验证码
			byte[] imgByte = GetImage.callJsById(driver, "imgCode");
			int len = (imgByte != null) ? imgByte.length : 0;
			String imgCode = (len > 0) ? ddddOcr.getImgCode(imgByte) : null;
			if (imgCode == null || imgCode.length() < 1) {
				System.out.println("len=" + len + ",imgCode=" + imgCode);
				return retEntity;
			}
			// 3 输入识别出来的图形验证码
			driver.findElement(By.id("img-code")).sendKeys(imgCode);

			// 4 点击获取验证码
			Thread.sleep(1 * 1000);
			WebElement getCodeElement = driver.findElement(By.id("smsCode"));
			getCodeElement.click();

			Thread.sleep(2 * 1000);
			String gtInfo = getCodeElement.getText();
			retEntity.setMsg(gtInfo);
			if (gtInfo != null && gtInfo.contains("重新发送")) {
				retEntity.setRet(0);
				return retEntity;
			} else {
				System.out.println("gtInfo=" + gtInfo);
			}
			return retEntity;
		} catch (Exception e) {
			System.out.println(e.toString());
			retEntity.setMsg(e.toString());
		} finally {
			driver.manage().deleteAllCookies();
		}
		return retEntity;
	}
	

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. 测试返回结果:

在这里插入图片描述

三 丶测试报告 :

在这里插入图片描述

四丶结语

北京市政府网,作为北京市的最高级政府机构, 采用的还是老一代的图形验证码已经落伍了, 用户体验一般,容易被破解, 一旦被国际黑客发起攻击,将会对老百姓形成骚扰,影响声誉。
由于人机识别能力的提高,图形验证的方式已经无法应对了, 建议采用新一代的短信验证防火墙。

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

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

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

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

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

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

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

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

相关文章

CDC 数据实时同步入湖的技术、架构和方案(截至2024年5月的现状调研)

近期&#xff0c;对 “实时摄取 CDC 数据同步到数据湖” 这一技术主题作了一系列深入的研究和验证&#xff0c;目前这部分工作已经告一段落&#xff0c;本文把截止目前&#xff08;2024年5月&#xff09;的研究结果和重要结论做一下梳理和汇总。为了能给出针对性的技术方案&…

深入分析 Android Activity (六)

文章目录 深入分析 Android Activity (六)1. Activity 的权限管理1.1 在 Manifest 文件中声明权限1.2 运行时请求权限1.3 处理权限请求结果1.4 处理权限的最佳实践 2. Activity 的数据传递2.1 使用 Intent 传递数据2.2 使用 Bundle 传递复杂数据 3. Activity 的动画和过渡效果3…

照片处理软件哪个好?爆款图片编辑工具分享

照片处理软件哪个好&#xff1f;在数字时代&#xff0c;照片处理软件已经成为我们日常生活和工作中不可或缺的工具。无论是为了美化照片、修复旧照&#xff0c;还是进行专业的图像处理&#xff0c;都有各种软件可以满足我们的需求。以下是一些值得一试的照片处理软件&#xff0…

海山数据库(He3DB)代理ProxySQL使用详解:(二)功能实测

读写分离实测 ProxySQL官方demo演示了三种读写分离的方式&#xff1a;使用不同的端口进行读写分离、使用正则表达式进行通用的读写分离、使用正则和digest进行更智能的读写分离。最后一种是针对特定业务进行的优化调整&#xff0c;也可将其归结为第二种方式&#xff0c;下边分…

IO流:字节流 字符流 缓冲流详解

IO流&#xff1a;字节流 字符流 缓冲流详解 &#x1f4da; 【Java】IO流&#xff1a;字节流 字符流 缓冲流详解 &#x1f4da;摘要引言一、“流”的概念1. “流”的分类1.1 输入流和输出流1.2 字节流和字符流字节和字符的区别&#xff1f;为什么要有字符流&#xff1f; 1.3 节点…

爬虫实战教程:深入解析配乐网站爬取1000首MP3

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、实战前准备 1. 选择目标网站 2. 分析网页结构 三、爬虫工作流程详解 1. 发…

Web上机:JSP+Servlet+JDBC的交互流程

目录 需求与设计 基础需求&#xff1a; 项目结构&#xff1a; 项目逻辑&#xff1a; 运行图示&#xff1a; 代码实现 Login.jsp InsertServlet SelectServlet Table.jsp user mysql表结构 Web开发技术迭代速度日新月异&#xff0c;对于技术的更新往往是基于底层一…

Node.js笔记(万字总结)

目录 前言 1.node介绍与使用 1.1 Node介绍 1.2 node.js的优势 1.3 node的安装 1.4 检验是否成功安装 1.5 第一个应用 1.5.1 服务器代码 server.js 1.5.2 完整代码 1.5.3 运行 1.5.4 测试 2.获取参数 3.模块系统 1.模块介绍 2.xiaoyu.js 3.xiaoyu.js完整代码 4…

Midjourney 推出Style Tuner工具 ,统一风格,提升创作效率!

Midjourney 由前 Magic Leap 程序员大卫 - 霍尔茨&#xff08;David Holz&#xff09;构思&#xff0c;于 2022 年夏天推出&#xff0c;在独立消息应用 Discord 的服务器上吸引了超过 1600 万用户&#xff0c;并由一个小规模的程序员团队不断更新&#xff0c;推出了包括平移、扩…

重温!瑞幸崩盘时的狂欢,我的股票盈利170%,陆正耀资本局大起底

瑞幸咖啡 瑞幸2019年5月&#xff0c;仅用了18个月就完成了上市。 不到1年&#xff0c;2020年3月戏剧化反转&#xff0c;被爆造假 2019年净收入虚增21亿&#xff0c;2季度2.5亿&#xff0c;3季度7亿、4季度11.7亿。 2019年成本支出虚增13亿&#xff0c;2季度1.5亿元&#xf…

UE4/UE5像素流送云推流:多人访问不稳定、画面糊、端口占用多等

UE4/UE5想要实现网页访问&#xff0c;很多工程师会选择guan方的像素流送。但这个技术要求在模型开发初期就接入。对于一些已有UE模型是无法进行流化的。虽然也可以解决新UE模型的网页访问问题&#xff0c;但在实际的应用中&#xff0c;点量云流也收到很多反馈说&#xff0c;使用…

重生之 SpringBoot3 入门保姆级学习(02、打包部署)

重生之 SpringBoot3 入门保姆级学习&#xff08;02、打包部署&#xff09; 1.6 打包插件1.7 测试 jar 包1.8 application.properties 的相关配置 1.6 打包插件 官网链接 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-starte…

短视频矩阵系统4年独立开发正规代发布接口源码搭建部署开发

1. 短视频矩阵源码技术开发要求及实现流程&#xff1a; 短视频矩阵源码开发要求具备视频录制、编辑、剪辑、分享等基本功能&#xff0c;支持实时滤镜、特效、音乐等个性化编辑&#xff0c;能够实现高效的视频渲染和处理。开发流程主要包括需求分析、技术选型、设计架构、编码实…

专家解读 | NIST网络安全框架(2):核心功能

NIST CSF是一个关键的网络安全指南&#xff0c;不仅适用于组织内部&#xff0c;还可帮助管理第三方网络安全风险。CSF核心包含了六个关键功能——治理、识别、保护、检测、响应和恢复&#xff0c;以及与这些功能相关的类别和子类别。本文将深入探讨CSF核心的主要内容&#xff0…

大气走航VOCS监测

1. 什么是走航监测&#xff1f; 走航监测主要指驾驶移动监测车&#xff0c;在一定区域范围之内边行驶、边检测、边反馈。通过车载的质谱监测系统&#xff0c;对环境空气中的VOCs进行快速检测&#xff1b;通过检测出的污染物总浓度&#xff0c;描绘污染地图。环保部门从污染地…

wincc如何实现远程监控1200PLC

用户监控中心和PLC不在同一个地方&#xff0c;需要通过互联网远程能监控PLC的运行状况。PLC型号是西门子1200&#xff0c;远程监控电脑用WINCC组态。wincc如何实现远程监控1200PLC呢。WINCC的通讯协议都是局域网&#xff0c;不能通过互联网找到远端PLC并通讯。随着工业物联网发…

PyTorch中的模型创建

最全最详细的PyTorch神经网络创建~ 话不多说直接开始~ 神经网络的创建步骤 定义模型类&#xff0c;需要继承nn.Module定义各种层&#xff0c;包括卷积层、池化层、全连接层、激活函数等等编写前向传播&#xff0c;规定信号是如何传输的 可以用 torchsummary 查看网络结构&…

拼多多的一场机试 解题报告 | 珂学家

前言 拼多多的一场机试 解题报告 有需要机试辅导&#xff0c;可以私信我 机试题 D. 任务队列是否会死锁&#xff1f; 一个任务队列&#xff0c;长度为n 可以添加一个任务&#xff0c;长度为a可以获取一个任务&#xff0c;长度为b 如果存在一个状态点&#xff0c;即不能添加…

python 两个表格字段列名称值,对比字段差异

支持xlsx,xls文件&#xff0c;相互对比字段列 输出两个表格文件相同字段&#xff0c;置底色为绿色 存在差异的不同字段&#xff0c;输出两个新的表格文件&#xff0c;差异字段&#xff0c;置底色为红色 import pandas as pd from openpyxl import load_workbook from openpy…