当前位置: 首页 > news >正文

【福建医科大学附属第一医院-注册安全分析报告】

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

  1. 暴力破解密码,造成用户信息泄露
  2. 短信盗刷的安全问题,影响业务及导致用户投诉
  3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞
    在这里插入图片描述

所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析

一、 福建医科大学附属第一医院PC 注册入口

简介:福建医科大学附属第一医院(以下简称“医院”)创建于1937年,是福建省首家公立西医医院。历经抗战的硝烟,告别动荡的岁月,百折不挠的附一人秉承“践行立德树人,守护生命安全,推动医学进步,促进人民健康”的使命,将医院建设成为福建省集医疗、教学、科研于一体的大型综合性三级甲等医院。医院综合实力雄厚,是福建省高水平医院,并被国家发改委、国家卫健委确定为首批全国疑难病症诊治能力提升工程项目医院和中国罕见病协作网福建省牵头单位。在国家卫健委公布的三级公立医院绩效考核中,连续5年荣获A+,分别位居全国第37名、第44名、第42名、第42名、第32名。医院荣登2023年研究型医院排行榜全国第33名,在2024年Nature发布的自然指数榜单中,位列全球医疗机构第284位,居福建省第一。与复旦大学附属华山医院共建的复旦大学附属华山医院福建医院(福建医科大学附属第一医院滨海院区)为全国首批10家国家区域医疗中心。

1. 注册引导页

在这里插入图片描述
在这里插入图片描述

2. 会员注册页面

在这里插入图片描述

二、 安全性分析报告:

福建医科大学附属第一医院采用的是自己研发的滑动验证码,容易被模拟器绕过甚至逆向后暴力攻击,滑动拼图识别率在 95% 以上。

在这里插入图片描述

三、 测试方法:

前端界面分析,这是福建医科大学附属第一医院自己研发的滑动验证码,网上没有现成的教学视频,但形式都差不多,没什么难度 , 这次还是采用模拟器的方式,关键点主要模拟器交互、距离识别和轨道算法3部分 。

在这里插入图片描述

  1. 模拟器交互部分

private static String INDEX_URL = "https://jk.fyyy.com:10081/module/backstage/pcweb/#/login";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {try {RetEntity retEntity = new RetEntity();driver.get(INDEX_URL);WebElement tabElement = ChromeDriverManager.waitElement(driver, By.xpath("//div/span[contains(text(),'暂无账号?点击注册')]"), 20);tabElement.click();			// 输入手机号Thread.sleep(1000);WebElement phoneElement = driver.findElement(By.xpath("//input[contains(@placeholder,'请输入手机号码')]"));phoneElement.sendKeys(phone);// 密码Thread.sleep(1000);WebElement passElement = driver.findElement(By.xpath("//input[contains(@placeholder,'设置密码')]"));passElement.sendKeys("Abc123456");WebElement passConfirmElement = driver.findElement(By.xpath("//input[contains(@placeholder,'确认密码')]"));passConfirmElement.sendKeys("Abc123456");Thread.sleep(500);List<WebElement> findElements = driver.findElements(By.xpath("//button/span"));WebElement sendElement = null;for (WebElement web : findElements) {String text = web.getText();if (text != null && text.contains("获取验证码")) {web.click();sendElement = web;break;}}Thread.sleep(2000);WebElement moveElemet = ChromeDriverManager.waitElement(driver, By.id("slider-move-btn"), 20);// 1 获取带阴影的背景图byte[] bigBytes = GetImage.callJsById(driver, "bg-img");// 2 获取小图byte[] smallBytes = GetImage.callJsById(driver, "slider-img");// 3 计算匹配到的位置String ckSum = GenChecksumUtil.genChecksum(bigBytes);Map<String, Double> openResult = cv2.getOpenCvDistance(ckSum, bigBytes, smallBytes, "Fyyy", 0);if (openResult == null || openResult.size() < 2) {System.out.println("ckSum=" + ckSum + "->openResult=" + openResult);return null;}Double r = 260.0 / 590.0;BigDecimal disD = new BigDecimal(openResult.get("minX") * r).setScale(0, BigDecimal.ROUND_HALF_UP);int distance = disD.intValue();// 4 滑动ActionMove.move(driver, moveElemet, distance);Thread.sleep(2000);String msg = (sendElement != null) ? sendElement.getText() : null;retEntity.setMsg(msg);if (msg != null && msg.contains("后重新获取")) {retEntity.setRet(0);}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. 距离识别


/*** * @param ckSum* @param bigBytes* @param smallBytes* @param factory* @return { width, maxX }*/public String[] getOpenCvDistance(String ckSum, byte bigBytes[], byte smallBytes[], String factory, int border) {try {String basePath = ConstTable.codePath + factory + "/";File baseFile = new File(basePath);if (!baseFile.isDirectory()) {baseFile.mkdirs();}// 小图文件File smallFile = new File(basePath + ckSum + "_s.png");FileUtils.writeByteArrayToFile(smallFile, smallBytes);// 大图文件File bigFile = new File(basePath + ckSum + "_b.png");FileUtils.writeByteArrayToFile(bigFile, bigBytes);// 边框清理(去干扰)byte[] clearBoder = (border > 0) ? ImageIOHelper.clearBoder(smallBytes, border) : smallBytes;File tpFile = new File(basePath + ckSum + "_t.png");FileUtils.writeByteArrayToFile(tpFile, clearBoder);String resultFile = basePath + ckSum + "_o.png";return getWidth(tpFile.getAbsolutePath(), bigFile.getAbsolutePath(), resultFile);} catch (Throwable e) {logger.error("getMoveDistance() ckSum=" + ckSum + " " + e.toString());for (StackTraceElement elment : e.getStackTrace()) {logger.error(elment.toString());}return null;}}/*** Open Cv 图片模板匹配* * @param tpPath*            模板图片路径* @param bgPath*            目标图片路径* @return { width, maxX }*/private String[] getWidth(String tpPath, String bgPath, String resultFile) {try {Rect rectCrop = clearWhite(tpPath);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 g_b = Imgcodecs.imread(bgPath);Mat edgesBg = new Mat();Imgproc.Canny(g_b, 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);String width = String.valueOf(cvtSlide.cols());String maxX = String.valueOf(maxLoc.x + cvtSlide.cols());System.out.println("OpenCv2.getWidth() width=" + width + ",maxX=" + maxX);return new String[] { width, maxX };} 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) {try {Mat matrix = Imgcodecs.imread(smallPath);int rows = matrix.rows();// height -> yint cols = matrix.cols();// width -> xSystem.out.println("OpenCv2.clearWhite()  rows=" + rows + ",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);System.out.println("openCv2 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;}}

3. 轨道生成及移动算法

/*** 双轴轨道生成算法,主要实现平滑加速和减速* * @param distance* @return*/public static List<Integer[]> getXyTrack(int distance) {List<Integer[]> track = new ArrayList<Integer[]>();// 移动轨迹try {int a = (int) (distance / 3.0) + random.nextInt(10);int h = 0, current = 0;// 已经移动的距离BigDecimal midRate = new BigDecimal(0.7 + (random.nextInt(10) / 100.00)).setScale(4, BigDecimal.ROUND_HALF_UP);BigDecimal mid = new BigDecimal(distance).multiply(midRate).setScale(0, BigDecimal.ROUND_HALF_UP);// 减速阈值BigDecimal move = null;// 每次循环移动的距离List<Integer[]> subList = new ArrayList<Integer[]>();// 移动轨迹boolean plus = true;Double t = 0.18, v = 0.00, v0;while (current <= distance) {h = random.nextInt(2);if (current > distance / 2) {h = h * -1;}v0 = v;v = v0 + a * t;move = new BigDecimal(v0 * t + 1 / 2 * a * t * t).setScale(4, BigDecimal.ROUND_HALF_UP);// 加速if (move.intValue() < 1)move = new BigDecimal(1L);if (plus) {track.add(new Integer[] { move.intValue(), h });} else {subList.add(0, new Integer[] { move.intValue(), h });}current += move.intValue();if (plus && current >= mid.intValue()) {plus = false;move = new BigDecimal(0L);v = 0.00;}}track.addAll(subList);int bk = current - distance;if (bk > 0) {for (int i = 0; i < bk; i++) {track.add(new Integer[] { -1, h });}}System.out.println("getMoveTrack(" + midRate + ") a=" + a + ",distance=" + distance + " -> mid=" + mid.intValue() + " size=" + track.size());return track;} catch (Exception e) {System.out.print(e.toString());return null;}}/*** 模拟人工移动* * @param driver* @param element页面滑块* @param distance需要移动距离* @throws InterruptedException*/public static void move(WebDriver driver, WebElement element, int distance) throws InterruptedException {List<Integer[]> track = getXyTrack(distance);if (track == null || track.size() < 1) {System.out.println("move() track=" + track);}int moveY, moveX;StringBuffer sb = new StringBuffer();try {Actions actions = new Actions(driver);actions.clickAndHold(element).perform();Thread.sleep(50);long begin, cost;Integer[] move;int sum = 0;for (int i = 0; i < track.size(); i++) {begin = System.currentTimeMillis();move = track.get(i);moveX = move[0];sum += moveX;moveY = move[1];if (moveX < 0) {if (sb.length() > 0) {sb.append(",");}sb.append(moveX);}actions.moveByOffset(moveX, moveY).perform();cost = System.currentTimeMillis() - begin;if (cost < 5) {Thread.sleep(5 - cost);}}if (sb.length() > 0) {System.out.println("-----backspace[" + sb.toString() + "]sum=" + sum + ",distance=" + distance);}Thread.sleep(180);actions.release(element).perform();Thread.sleep(500);} catch (Exception e) {StringBuffer er = new StringBuffer("move() " + e.toString() + "\n");for (StackTraceElement elment : e.getStackTrace())er.append(elment.toString() + "\n");logger.error(er.toString());System.out.println(er.toString());}}

4. 图片比对结果测试样例:
在这里插入图片描述

四丶结语

福建医科大学附属第一医院(以下简称“医院”)创建于1937年,是福建省首家公立西医医院。历经抗战的硝烟,告别动荡的岁月,百折不挠的附一人秉承“践行立德树人,守护生命安全,推动医学进步,促进人民健康”的使命,将医院建设成为福建省集医疗、教学、科研于一体的大型综合性三级甲等医院。医院综合实力雄厚,是福建省高水平医院,并被国家发改委、国家卫健委确定为首批全国疑难病症诊治能力提升工程项目医院和中国罕见病协作网福建省牵头单位。与复旦大学附属华山医院共建的复旦大学附属华山医院福建医院(福建医科大学附属第一医院滨海院区)为全国首批10家国家区域医疗中心。医院作为涉及民生的重点事业单位,技术实力较弱采取采购产品的方式,采购了一家智业健康的软件产品,这家公司研发的滑动验证产品, 在一定程度上提高了用户体验, 不过随着图形识别技术及机器学习能力的提升,所以在网上破解的文章和教学视频也是大量存在,并且经过验证的确有效, 所以除了滑动验证方式, 花样百出的产品层出不穷,但本质就是牺牲用户体验来提高安全。

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

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

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

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

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

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

相关文章:

【福建医科大学附属第一医院-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …...

第二届新生程序设计竞赛热身赛(C语言)

A:饥饿的XP XP迷失在X星球&#xff0c;他醒来时已经很久很久很久没有吃过东西了。他突然发现身边有一张地图&#xff0c;上面有X星球上每一个食物供给点的位置。太好了&#xff0c;XP跳了起来。他决定先把肚子填饱再去寻找其他伙伴。现在已知XP的位置(X, Y)&#xff0c;以及他的…...

WebSocket和HTTP请求的区别

1. 连接方式 HTTP请求&#xff1a;基于“请求-响应”模式。每次通信都要重新建立连接&#xff0c;客户端发送请求后服务器返回响应&#xff0c;连接就断开了。这种模式通常适合不频繁更新的数据&#xff0c;如静态页面的加载。WebSocket&#xff1a;支持长连接&#xff0c;连接…...

【Python · Pytorch】人工神经网络 ANN(中)

【Python Pytorch】人工神经网络 ANN&#xff08;中&#xff09; 6. 反向传播6.1 梯度下降法6.1.1 线搜索方法6.1.2 微分 & 导数6.1.3 偏导数6.1.4 Jacobian矩阵6.1.5 梯度 & 梯度下降法按维度介绍 6.1.6 面临挑战平原现象 & 振荡现象局部最小值鞍点梯度消失梯度爆…...

穷举vs暴搜vs深搜vs回溯vs剪枝 算法专题

一. 全排列 全排列 class Solution {List<List<Integer>> ret;List<Integer> path;boolean[] check;public List<List<Integer>> permute(int[] nums) {ret new ArrayList<>();//存放结果path new ArrayList<>();存放每个路径的…...

Uni-App-02

条件编译 条件编译概念 不同的运行平台终归有些专有的特性&#xff0c;无法实现跨平台完全兼容&#xff0c;例如&#xff1a;微信小程序导航栏右上角的关闭图标。 uni-app提供了一种“条件编译”机制&#xff0c;可以针对特定的平台编译执行特定的代码&#xff0c;否则不执行。…...

在做题中学习(72):最小栈

解法&#xff1a;pair<int,int>解决 思路&#xff1a;stack里存pair&#xff0c;push时&#xff0c;first存当前值&#xff0c;而每次push都要更新pair的second&#xff0c;使它成为更小值&#xff0c;最后的getmin&#xff0c;只用取top().second即可拿到最小值。 cla…...

详解软件设计中分库分表的几种实现以及应用示例

详解软件设计中分库分表的几种实现以及应用示例https://mp.weixin.qq.com/s?__bizMzkzMTY0Mjc0Ng&mid2247485108&idx1&sn8b3b803c120c163092c70fa65fe5541e&chksmc266aaa1f51123b7af4d7a3113fe7c25daa938a04ced949fb71a8b7773e861fb93d907435386#rd...

随着飞行汽车的亮相,在环保方面有什么保护措施吗

飞行汽车具备环保潜力&#xff0c;采用电动或混合动力系统减少污染&#xff0c;并拓展应用场景。多家企业布局&#xff0c;沃飞长空作为国内eVTOL(电动垂直起降航空器)研发的领先企业&#xff0c;在环保这一点做的非常到位&#xff0c;AE200采用纯电动力系统,零碳排放,静默飞行…...

docker安装、设置非sudo执行、卸载

安装 sudo snap install docker 设置docker非sudo执行 sudo groupadd docker sudo usermod -aG docker $USER newgrp docker sudo chown root:docker /var/run/docker.sock 卸载docker 1.删除docker及安装时自动安装的所有包 apt-get autoremove docker docker-ce docker-…...

WebSocket简单使用

1.WebSocket 简介 WebSocket 是一种网络通信协议&#xff0c;提供了在单个TCP连接上进行全双工通信的能力。这意味着客户端和服务器可以同时发送和接收数据&#xff0c;而不需要等待对方的回应。WebSocket 协议在2011年成为国际标准&#xff0c;并且被大多数现代浏览器所支持。…...

【FinalShell问题】FinalShell连接虚拟机超时问题

问题描述&#xff1a; 打开fianlshell连接之前设置好的SSH连接&#xff08;Linux&#xff09;&#xff0c;结果连接不上&#xff0c;并出现提示&#xff1a;java.net.ConnectException: Connection timed out: connect&#xff0c;说明虚拟机连接超时。 问题解决&#xff1a;…...

Matplotlib可视化——三维图与莫比乌斯带可视化

实验名称 Matplotlib中的三维图绘制:莫比乌斯带的可视化 实验目标 三维的点和线三维轮廓图线框图和曲面图曲面三角形 举例:莫比乌斯带的可视化实验主要使用的Python库 名称版本简介Numpy1.19.5数组运算Matplotlib3.3.4数据可视化实验适用的对象 学习对象:本科学生、研究生…...

【PyCharm配置Conda的虚拟环境】

conda create了一个新的虚拟环境&#xff0c;想在PyCharm里面使用这个环境&#xff0c;但是怎么都添加不上。 解决办法&#xff0c;把conda executable选择为conda安装目录下的condabin下的conda.bat文件&#xff0c;成功&#xff01;...

今日总结10.31

BIO、NIO 和 AIO 的区别 BIO&#xff08;Blocking I/O&#xff0c;同步阻塞I/O&#xff09;、NIO&#xff08;Non-blocking I/O&#xff0c;同步非阻塞I/O&#xff09;和AIO&#xff08;Asynchronous I/O&#xff0c;异步非阻塞I/O&#xff09;是Java中的三种不同的I/O模型&am…...

2024年【汽车修理工(高级)】考试题及汽车修理工(高级)最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【汽车修理工&#xff08;高级&#xff09;】考试题及汽车修理工&#xff08;高级&#xff09;最新解析&#xff0c;包含汽车修理工&#xff08;高级&#xff09;考试题答案和解析及汽车修理工&#xff08;高级…...

17. 从尾到头打印链表

文章目录 QuestionIdeasCode Question 输入一个链表的头结点&#xff0c;按照 从尾到头 的顺序返回节点的值。 返回的结果用数组存储。 数据范围0≤链表长度 ≤1000。 样例 输入&#xff1a;[2, 3, 5] 返回&#xff1a;[5, 3, 2] Ideas 直接遍历链表&#xff0c;然后倒序…...

有没有噪音低的宠物空气净化器推荐?希喂、IAM性能PK

有一说一&#xff0c;随着清洁家电市场的不断发展&#xff0c;市面上的各种清洁家电品类也是越来越多&#xff0c;像是吸尘器、洗地机、扫地机等等这些产品估计大家都很熟悉了。 但&#xff01;如果你家也跟我家一样也是养了几只猫猫狗狗&#xff0c;那你就会发现到&#xff0…...

EasyExcel文件导入与导出

EasyExcel是一个为了简化Excel操作而生的开源库&#xff0c;它可以帮助我们以简洁的代码完成Excel文件的导入和导出。 以下是使用EasyExcel进行文件导入和导出的示例代码&#xff1a; 导入&#xff08;读取&#xff09;Excel文件&#xff1a; import com.alibaba.excel.Easy…...

【成都新篇】龙信科技电子取证实验室,引领科技取证新时代

文章关键词&#xff1a;电子数据取证实验室、手机取证、介质取证、云取证、现场勘查、电子物证 在科技创新的浪潮中&#xff0c;龙信科技成都实验室以其卓越的电子数据取证服务&#xff0c;成为了中西部地区一颗璀璨的明珠。随着新址的搬迁&#xff0c;我们不仅扩大了业务范围…...

Android View

前面我们了解了Android四大组件的工作流程&#xff0c;Android中还存在一个和四大组件地位相同的概念&#xff1a;View&#xff0c;用于向用户页面展示内容。我们经常使用的TextView、Button、ImageView控件等都继承于它&#xff0c;也会自定义View实现自定义效果。View类源码内…...

从一到无穷大 #38:讨论 “Bazel 集成仅使用 Cmake 的依赖项目” 通用方法

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 正文样例代码 正文 Bazel项目引用仅使用Cmake依赖项目&#xff0c;目前业界最为普遍…...

Python飞舞蝙蝠

目录 系列文章 写在前面 完整代码 代码分析 写在后面 系列文章 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码…...

shodan搜索引擎——土豆片的网安之路

工作原理&#xff1a; 在服务器上部署了各种扫描器&#xff0c;如漏洞扫描器&#xff0c;硬件扫描器&#xff0c;目录扫描器等等&#xff0c;24小时不停的扫描&#xff0c;批量对IP地址扫描 优点&#xff1a;方便&#xff0c;很快得到最新扫描结果&#xff0c;漏洞信息 缺点…...

uniapp 报错Invalid Host header

前言 在本地使用 nginx 反向代理 uniapp 时&#xff0c;出现错误 Invalid Host header 错误原因 因项目对 hostname 进行检查&#xff0c;发现 hostname 不是预期的&#xff0c;所以&#xff0c;报错 Invalid Host header 。 解决办法 这样做是处于安全考虑。但&#xff0…...

删除 AzureArcSetup 安装程序及提示

删除 AzureArcSetup 安装程序及提示 文章目录 删除 AzureArcSetup 安装程序及提示一、基础环境二、适用场景三、过程和方法 版权声明&#xff1a;本文为CSDN博主「杨群」的原创文章&#xff0c;遵循 CC 4.0 BY-SA版权协议&#xff0c;于2024年10月31日首发于CSDN&#xff0c;转…...

NGPT:在超球面上进行表示学习的归一化 Transformer

在超球面上进行表示学习的归一化 Transformer 1. 研究背景2. nGPT 的核心贡献超球面上的网络参数优化作为超球面上的变度量优化器更快的收敛速度 3. 从 GPT 到 nGPT 的演变标记嵌入和输出逻辑 层和块自注意力块MLP 块有效学习率在 ADAM 中的应用总结 4. 实验结果训练加速网络参…...

云原生Istio基础

一&#xff0e;Service Mesh 架构 Service Mesh&#xff08;服务网格&#xff09;是一种用于处理服务到服务通信的专用基础设施层。它的主要目的是将微服务之间复杂的通信和治理逻辑从微服务代码中分离出来&#xff0c;放到一个独立的层中进行管理。传统的微服务架构中&#x…...

Word2Vec优化与提升技巧

随着自然语言处理领域的快速发展,Word2Vec 已成为常见的词向量生成工具。然而,单纯依赖默认设置往往不能在实际业务需求中取得最佳效果。通过调整模型的参数、优化算法以及合理处理大规模语料库,可以显著提升模型的表现和效率,适应复杂的应用场景。这篇文章将带你深入了解 …...

Java 开发——(下篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus

上篇速递 - Spring Boot 3 MybatisPlus 五、静态资源访问 1. 基础配置 在 Spring Boot 中访问静态资源非常方便。Spring Boot 默认支持从以下位置加载静态资源&#xff1a; /META-INF/resources//resources//static//public/ 这些目录下的文件可以直接通过 URL 访问。 例…...