wordpress支持什么数据库/广州seo网站推广
前言
由于网站注册入口容易被黑客攻击,存在如下安全问题:
- 暴力破解密码,造成用户信息泄露
- 短信盗刷的安全问题,影响业务及导致用户投诉
- 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞
所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析
一、 月之暗面kimi PC端注册入口
简介:Kimi是北京月之暗面科技有限公司于2023年10月9日推出的一款智能助手,主要应用场景为专业学术论文的翻译和理解、辅助分析法律问题、快速理解API开发文档等,是全球首个支持输入20万汉字的智能助手产品。 Kimi在二级市场一度复现了ChatGPT“带货能力”的势头,引发了一众“Kimi概念股”狂飙猛涨。
2024年3月18日,Kimi智能助手启动200万字无损上下文内测。 3月21日,Kimi因流量突然剧增无法正常使用。 2024年4月18日,月之暗面官宣旗下Kimi智能助手更新。 4月24日,月之暗面宣布Kimi大模型学会“使用工具”了,API已支持Tool Calling功能。 5月,Kimi推出付费打赏功能,开始试探C端付费意愿。 10月,月之暗面正式上线具备AI自主搜索能力的Kimi探索版,搜索量是普通版的10倍,一次搜索即可精读500个页面。
二、 安全性分析报告:
采用极验的V4版本,容易被模拟器绕过甚至逆向后暴力攻击,滑动拼图识别率在 95% 以上。
三、 测试方法:
前端界面分析,版本号为4.0,这就好办了, 网上有大量现成的逆向文章及视频参考,不过我们这次不用逆向, 只是采用模拟器的方式,关键点主要模拟器交互、距离识别和轨道算法3部分
极验4代滑块验证码破解(补环境直接强暴式拿下)
https://blog.csdn.net/qq_41866988/article/details/132020587
- 模拟器交互部分
private GeetClient geetClient = new GeetClient(this.getClass().getSimpleName(), 128, 256);private final String INDEX_URL = "https://login.moonshot.cn/?source=https%3A%2F%2Fplatform.moonshot.cn%2Fredirect&appid=dev-workbench";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {try {RetEntity retEntity = new RetEntity();driver.get(INDEX_URL);Thread.sleep(200);WebElement findElement = ChromeDriverManager.waitElement(driver, By.xpath("//button[contains(text(),'手机快捷登录')]"), 10);findElement.click();// 输入手机号WebElement phoneElemet = ChromeDriverManager.waitElement(driver, By.id("phone"), 500);phoneElemet.sendKeys(phone);// agreeWebElement agreeElement = driver.findElement(By.xpath("//span[@data-testid='msh-phonelogin-agree-checkbox']"));agreeElement.click();// 获取滑动按钮WebElement getCodeElemet = ChromeDriverManager.waitElement(driver, By.xpath("//span[contains(text(),'发送验证码')]"), 1);getCodeElemet.click();Thread.sleep(1000);boolean isRobot = true;boolean result = (isRobot) ? geetClient.moveV4(driver, 852, 657) : geetClient.moveV4(driver);if (!result) {return retEntity;}Thread.sleep(2000);// send-verify-codeWebElement resendElement = driver.findElement(By.xpath("//button[@data-testid='send-verify-code']"));String msg = (result) ? resendElement.getText() : null;if (msg != null && msg.contains("s")) {retEntity.setMsg(msg);retEntity.setRet(0);}return retEntity;} catch (Exception e) {System.out.println("send() " + e.toString());StringBuffer er = new StringBuffer("send() " + e.toString() + "\n");for (StackTraceElement elment : e.getStackTrace())er.append(elment.toString() + "\n");System.out.println(er.toString());return null;} finally {driver.manage().deleteAllCookies();}}
2. 距离识别
/*** Open Cv 图片模板匹配* * @param tpPath* 模板图片路径* @param bgPath* 目标图片路径* @return { width, maxX }*/public Map<String, Double> getWidth(String tpPath, String bgPath, String resultFile) {try {Map<String, Integer> hlMap = new HashMap<String, Integer>();Rect rectCrop = clearWhite(tpPath, hlMap);Mat g_tem = Imgcodecs.imread(tpPath);Mat clearMat = g_tem.submat(rectCrop);Mat cvt = new Mat();Imgproc.cvtColor(clearMat, cvt, Imgproc.COLOR_RGB2GRAY);Mat edgesSlide = new Mat();Imgproc.Canny(cvt, edgesSlide, threshold1, threshold2);Mat cvtSlide = new Mat();Imgproc.cvtColor(edgesSlide, cvtSlide, Imgproc.COLOR_GRAY2RGB);Imgcodecs.imwrite(tpPath, cvtSlide);Mat bgOrign = Imgcodecs.imread(bgPath);// 当滑块的高度和背景图高度一致才做截取boolean isSub = (bgOrign.rows() == hlMap.get("rows"));Mat bgMat = bgOrign;if (isSub) {int minY = hlMap.get("minY");int maxY = hlMap.get("maxY");int rowStart = minY >= 2 ? minY - 2 : minY;int rowEnd = bgOrign.rows() - maxY >= 2 ? maxY + 2 : maxY;bgMat = bgOrign.submat(rowStart, rowEnd, 0, bgOrign.cols());}Mat edgesBg = new Mat();Imgproc.Canny(bgMat, edgesBg, threshold1, threshold2);Mat cvtBg = new Mat();Imgproc.cvtColor(edgesBg, cvtBg, Imgproc.COLOR_GRAY2RGB);int result_rows = cvtBg.rows() - cvtSlide.rows() + 1;int result_cols = cvtBg.cols() - cvtSlide.cols() + 1;Mat g_result = new Mat(result_rows, result_cols, CvType.CV_32FC1);Imgproc.matchTemplate(cvtBg, cvtSlide, g_result, Imgproc.TM_CCOEFF_NORMED); // 归一化平方差匹配法// 归一化相关匹配法MinMaxLocResult minMaxLoc = Core.minMaxLoc(g_result);Point maxLoc = minMaxLoc.maxLoc;Imgproc.rectangle(cvtBg, maxLoc, new Point(maxLoc.x + cvtSlide.cols(), maxLoc.y + cvtSlide.rows()), new Scalar(0, 0, 255), 1);Imgcodecs.imwrite(resultFile, cvtBg);Map<String, Double> paramMap = new HashMap<String, Double>();paramMap.put("tpWidth", g_tem.cols() * 1.0);paramMap.put("bigWidth", cvtBg.cols() * 1.0);paramMap.put("width", cvtSlide.cols() * 1.0);paramMap.put("minX", maxLoc.x);paramMap.put("maxX", maxLoc.x + cvtSlide.cols());System.out.println("OpenCv2.getWidth() " + paramMap.toString());return paramMap;} catch (Throwable e) {System.out.println("getWidth() " + e.toString());logger.error("getWidth() " + e.toString());for (StackTraceElement elment : e.getStackTrace()) {logger.error(elment.toString());}return null;}}public Rect clearWhite(String smallPath, Map<String, Integer> hlMap) {try {Mat matrix = Imgcodecs.imread(smallPath);int rows = matrix.rows();// height -> yint cols = matrix.cols();// width -> xhlMap.put("rows", rows);hlMap.put("cols", cols);Double rgb;double[] arr;int minX = 255;int minY = 255;int maxX = 0;int maxY = 0;Color c;for (int x = 0; x < cols; x++) {for (int y = 0; y < rows; y++) {arr = matrix.get(y, x);rgb = 0.00;for (int i = 0; i < 3; i++) {rgb += arr[i];}c = new Color(rgb.intValue());int b = c.getBlue();int r = c.getRed();int g = c.getGreen();int sum = r + g + b;if (sum >= 5) {if (x <= minX)minX = x;else if (x >= maxX)maxX = x;if (y <= minY)minY = y;else if (y >= maxY)maxY = y;}}}int boder = 1;if (boder > 0) {minX = (minX > boder) ? minX - boder : 0;maxX = (maxX + boder < cols) ? maxX + boder : cols;minY = (minY > boder) ? minY - boder : 0;maxY = (maxY + boder < rows) ? maxY + boder : rows;}int width = (maxX - minX);int height = (maxY - minY);hlMap.put("minY", minY);hlMap.put("maxY", maxY);System.out.println("openCv2.clearWhite() [" + rows + ", " + cols + "],minX=" + minX + ",minY=" + minY + ",maxX=" + maxX + ",maxY=" + maxY + "->width=" + width + ",height=" + height);Rect rectCrop = new Rect(minX, minY, width, height);return rectCrop;} catch (Throwable e) {StringBuffer er = new StringBuffer("clearWrite() " + e.toString() + "\n");for (StackTraceElement elment : e.getStackTrace()) {er.append(elment.toString() + "\n");}logger.error(er.toString());System.out.println(er.toString());return null;}}
- 轨道生成及移动算法
/*** class='geetest_bg_a30707f4 geetest_bg'* * @param driver* @param offSet* @return*/public boolean moveV4(WebDriver driver, Integer startX, Integer startY) {File bigFile = null, smllFile = null;try {long t = System.currentTimeMillis();String path = dataPath + "/" + spCode + "/";WebElement tipsElement = driver.findElement(By.className("geetest_text_tips"));String tips = (tipsElement != null) ? tipsElement.getText() : null;System.out.println("tips=" + tips);// 获取背景图List<WebElement> urlElements = driver.findElements(By.xpath("//div[contains(@style,'background-image')]"));int index = (urlElements.size() >= 4) ? 2 : 0;// 小图smllFile = new File(path + t + "_small.png");byte[] smallBytes = getImgByBackGround(urlElements.get(index), smllFile);File tpFile = new File(path + t + "_t.png");FileUtils.writeByteArrayToFile(tpFile, smallBytes);// 大图bigFile = new File(path + t + "_bg.png");byte[] bigBytes = getImgByBackGround(urlElements.get(index + 1), bigFile);String ckSum = GenChecksumUtil.genChecksum(bigBytes);String resultFile = path + t + "_o.png";// 计算距离Map<String, Double> outMap = cv2.getWidth(tpFile.getAbsolutePath(), bigFile.getAbsolutePath(), resultFile);if (outMap == null || outMap.size() < 2) {System.out.println("getMoveDistance() ,outMap=" + outMap);return false;}// 计算匹配到的位置Double tpWidth = outMap.get("tpWidth");Double width = outMap.get("width");Double leftD = (tpWidth - width) / 2.0;BigDecimal openDistanceD = new BigDecimal(outMap.get("minX") - leftD).setScale(0, BigDecimal.ROUND_HALF_UP);int distance = openDistanceD.intValue();if (distance <= 0) {System.out.println("getMoveDistance() ,outMap=" + outMap + "->" + distance);return false;}System.out.println(tpWidth + "-" + width + "->leftD=" + leftD + ",distance=" + distance);if (startX != null && startY != null) {RobotMove.move(startX, startY, distance);} else {By sliedBy = By.xpath("//div[contains(@class,'geetest_btn')]");List<WebElement> sliedElements = driver.findElements(sliedBy);System.out.println("size=" + sliedElements.size());boolean displayed;for (WebElement web : sliedElements) {displayed = web.isDisplayed();System.out.println("displayed=" + displayed + "->" + web.getAttribute("class"));if (displayed) {ActionMove.move(driver, web, distance);break;}}}// 滑动结果WebElement infoElement = ChromeDriverManager.getInstance().waitForLoad(By.className("geetest_result_tips"), 1);String gtInfo = (infoElement != null) ? infoElement.getAttribute("innerText") : null;if (gtInfo != null) {System.out.println("gtInfo=" + gtInfo);if (gtInfo.contains("速度超过") || gtInfo.contains("通过验证")) {return true;}}return false;} catch (Exception e) {logger.error(e.toString());return false;}}private byte[] getImgByBackGround(WebElement urlElement, File bFile) throws Exception {String cssValue = (urlElement != null) ? urlElement.getCssValue("background-image") : null;String bgUrl = (cssValue != null && cssValue.contains("\"")) ? cssValue.split("\"")[1] : null;if (bgUrl == null || !bgUrl.startsWith("http")) {System.out.println("bgUrl=" + bgUrl);return null;}FileUtils.copyURLToFile(new URL(bgUrl), bFile);byte[] bigBytes = FileUtils.readFileToByteArray(bFile);return bigBytes;}
- OpenCv 轮廓匹配测试样例:
四丶结语
月之暗面最近完成了一轮超过10亿美金(折合人民币约71.9亿元)的融资,投资方包括红杉中国、小红书、美团和阿里。
这一轮融资使月之暗面的估值达到了约25亿美金(折合人民币约179.9亿元),成为国内大模型领域的头部企业之一。作为拥有最强实力AI大模型的科技企业, 采用的却是通俗的滑动验证产品, 该产品稳定并且市场占有率很高, 在一定程度上提高了用户体验, 但安全性在机器学习的今天, 已经无法应对攻击了,并且正是由于该产品通俗, 所以在网上破解的文章和教学视频也是大量存在,并且经过验证滑动产品很容易被破解, 所以除了滑动验证方式, 花样百出的产品层出不穷,但本质就是牺牲用户体验来提高安全。
很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。
所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#
戳这里→康康你手机号在过多少网站注册过!!!
谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?
>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》
相关文章:

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

Flink实现实时数据处理
代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*-from pyflink.datastream import StreamExecutionEnvironment from pyflink.table import StreamTableEnvironment, EnvironmentSettings, DataTypes# 初始化执行环境 s_env StreamExecutionEnvironment.get_…...

11.9.2024刷华为
文章目录 HJ31 单词倒排HJ32 密码提取语法知识记录 傻逼OD题目又不全又要收费,看毛线,莫名奇妙 HW这叼机构别搁这儿害人得不得? 我觉得我刷完原来的题目 过一遍华为机考的ED卷出处,就行了 HJ31 单词倒排 游戏本做过了好像 HJ3…...

Chromium 中chrome.system.storage扩展接口定义c++
一、chrome.system.storage 您可以使用 chrome.system.storage API 查询存储设备信息,并在连接和分离可移动存储设备时收到通知。 权限 system.storage 类型 EjectDeviceResultCode 枚举 "success" 移除命令成功执行 - 应用可以提示用户移除设备。…...

【Qt聊天室客户端】登录窗口
1. 验证码 具体实现 登录界面中创建验证码图片空间,并添加到布局管理器中 主要功能概述(创建一个verifycodewidget类专门实现验证码操作) 详细代码 // 头文件#ifndef VERIFYCODEWIDGET_H #define VERIFYCODEWIDGET_H#include <QWidget>…...

如何显示模型特征权重占比图【数据分析】
可视化模型的特征权重 1、流程 1、导入库: numpy:用于处理数组和矩阵。 matplotlib.pyplot:用于绘图。 sklearn.datasets:用于加载数据集。 sklearn.ensemble.RandomForestClassifier:用于训练随机森林模型。2、加载数据集: 使用load_iris函数加载Iris数据集。3、训练模…...

Ubuntu24安装MySQL
下载deb包: 先更新系统包: sudo apt update sudo apt update -y下载mysql: wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb 安装deb包: sudo dpkg -i mysql-apt-config_0.8.17-1_all.deb目前mysql还没有正式支持Ubun…...

微服务架构面试内容整理-Eureka
Spring Cloud Netflix 是一个为构建基于 Spring Cloud 的微服务应用提供的解决方案,利用 Netflix 的开源组件来实现常见的分布式系统功能。以下是 Spring Cloud Netflix 的一些主要组件和特点: 服务注册与发现:Eureka 是一个 RESTful 服务,用于注册和发现微服务。服务实例在…...

qt QErrorMessage详解
1、概述 QErrorMessage是Qt框架中用于显示错误消息的一个对话框类。它提供了一个简单的模态对话框,用于向用户显示错误或警告消息。QErrorMessage通常用于应用程序中,当需要向用户报告错误但不希望中断当前操作时。它提供了一个标准的错误消息界面&…...

SpringBoot 将多个Excel打包下载
在Spring Boot应用中,如果你需要将多个Excel文件打包成一个ZIP文件并提供下载,你可以使用一些Java库来帮助完成这个任务。这里我将展示如何使用Apache POI来生成Excel文件,以及使用Java.util.zip来创建ZIP文件,并通过Spring Boot的…...

分页存储小总结
知识点: 什么是分页存储? 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”(页框页帧内存块物理块物理页面)。每个页框有一个编号,即“页框号”(…...

Star-CCM+应用篇之动力电池温度场仿真操作流程与方法
1 动力电池温度场仿真项目 电池包内模组温度分布、电芯温度分布、温升速率、充电时间等。 2 动力电池温度场仿真分析流程图 图1 电池包热流场分析流程 3 动力电池温度场仿真参数需求 类别...

Spring Boot应用开发:从入门到精通
Spring Boot应用开发:从入门到精通 Spring Boot是Spring框架的一个子项目,旨在简化Spring应用的初始搭建和开发过程。通过自动配置和约定大于配置的原则,Spring Boot使开发者能够快速构建独立的、生产级别的Spring应用。本文将深入探讨Sprin…...

【JAVA项目】基于jspm的【医院病历管理系统】
技术简介:采用jsp技术、MySQL等技术实现。 系统简介:通过标签分类管理等方式,实现管理员;个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、…...

Python中的常见配置文件写法
在软件开发过程中,开发者常常需要利用一些固定的参数或常量。对于这些相对恒定且频繁使用的元素,一种常见的做法是将它们集中存储在一个特定的文件中,以避免在多个模块代码中重复定义,从而维护核心代码的清晰度和整洁性。 具体而…...

语义分割实战——基于PSPnet神经网络动物马分割系统源码
第一步:准备数据 动物马分割数据,总共有328张图片,里面的像素值为0和1,所以看起来全部是黑的,不影响使用 第二步:搭建模型 psp模块的样式如下,其psp的核心重点是采用了步长不同,po…...

Python+Appium编写脚本
一、环境配置 1、安装JDK,版本1.8以上 2、安装Python,版本3.x以上,用来解释python 3、安装node.js,版本^14.17.0 || ^16.13.0 || >18.0.0,用来安装Appimu Server 4、安装npm,版本>8,用…...

RK3288 android7.1 适配 ilitek i2c接口TP
一,Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器,如 ILI6480、ILI9341 等,采用 I2C 接口。 这些控制器能够支持多点触控,并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&am…...

C++ 越来越像函数式编程了!
C 越来越像函数式编程了 大家好,欢迎来到今天的博客话题。今天我们要聊的是 C 这门老牌的强类型语言是如何一步一步向函数式编程靠拢的。从最早的函数指针,到函数对象(Functor),再到 std::function 和 std::bind&…...

maven工程结构说明
1、maven工程文件目录 |-- pom.xml # Maven 项目管理文件 |-- src # 放项目源文件|-- main # 项目主要代码| |-- java # Java 源代码目录| | -- com/example/myapp…...

【GESP】C++一级真题练习(202312)luogu-B3921,小杨的考试
GESP一级真题练习。为2023年12月一级认证真题。逻辑计算问题。 题目题解详见:【GESP】C一级真题练习(202312)luogu-B3921,小杨的考试 | OneCoder 【GESP】C一级真题练习(202312)luogu-B3921,小杨的考试 | OneCoderGESP一级真题练习。为2023…...

游戏中Dubbo类的RPC设计时的注意要点
一.消费方 1.需要使用到动态代理,代理指定的接口,这样子接口被调用时,就可以拿到:"类名 方法名参数返回值" 这些类型。 2.既然是rpc,那么接口被调用时,肯定在动态代理中会进行网络消息的发送&a…...

ARXML汽车可扩展标记性语言规范讲解
ARXML: Automotive Extensible Markup Language (汽车可扩展标记语言) xmlns: Xml name space (xml 命名空间) xsd: Xml Schema Definition (xml 架构定义) 1、XML与HTML的区别,可扩展。 可扩展,主要是…...

Hadoop(HDFS)
Hadoop是一个开源的分布式系统架构,旨在解决海量数据的存储和计算问题,Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)、MapReduce编程模型和YARN资源管理器,最近需求需要用到HDFS和YARN。 文章目录 HDFS优缺点HDFS的读写原理 常…...

机器学习系列----梯度下降算法
梯度下降算法(Gradient Descent)是机器学习和深度学习中最常用的优化算法之一。无论是在训练神经网络、线性回归模型,还是其他类型的机器学习模型时,梯度下降都是不可或缺的一部分。它的核心目标是最小化一个损失函数(…...

AI大模型:软件开发的未来之路
随着AI技术的快速发展,AI大模型正在对软件开发流程产生深远的影响。从代码自动生成到智能测试,AI大模型正在重塑软件开发的各个环节,为软件开发者、企业和整个产业链带来新的流程和模式变化。 首先,AI大模型的定义是指通过大规模…...

指标+AI+BI:构建数据分析新范式丨2024袋鼠云秋季发布会回顾
10月30日,袋鼠云成功举办了以“AI驱动,数智未来”为主题的2024年秋季发布会。大会深度探讨了如何凭借 AI 实现新的飞跃,重塑企业的经营管理方式,加速数智化进程。 作为大会的重要环节之一,袋鼠云数栈产品经理潮汐带来了…...

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp
2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto-WriteUp Crypto:Crypto-2:Crypto-3: 前言:本次比赛已经结束,用于赛后复现,欢迎大家交流学习! Crypto: Crypto-2: …...

关于Markdown的一点疑问,为什么很多人说markdown比word好用?
markdown和word压根不是一类工具,不存在谁比谁好,只是应用场景不一样。 你写博客、写readme肯定得markdown,但写合同、写简历肯定word更合适。 markdown和word类似邮箱和微信的关系,这两者都可以通信,但微信因为功能…...

NoSQL大数据存储技术测试(1)绪论
写在前面:未完成测试的同学,请先完成测试,此博文供大家复习使用,(我的答案)均为正确答案,大家可以放心复习 单项选择题 第1题 以下不属于云计算部署模型的是( ) 公…...