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

外国的网站是什么网站网页设计图片横向排列

外国的网站是什么网站,网页设计图片横向排列,旅游管理网站业务模块,教做月嫂的网站有吗前言 由于网站注册入口容易被黑客攻击#xff0c;存在如下安全问题#xff1a; 暴力破解密码#xff0c;造成用户信息泄露短信盗刷的安全问题#xff0c;影响业务及导致用户投诉带来经济损失#xff0c;尤其是后付费客户#xff0c;风险巨大#xff0c;造成亏损无底洞…前言 由于网站注册入口容易被黑客攻击存在如下安全问题 暴力破解密码造成用户信息泄露短信盗刷的安全问题影响业务及导致用户投诉带来经济损失尤其是后付费客户风险巨大造成亏损无底洞 所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案 但在机器学习能力提高的当下连百度这样的大厂都遭受攻击导致点名批评 图形验证及交互验证方式的安全性到底如何 请看具体分析 一、 爱加密_云平台PC 注册入口 简介北京智游网安科技有限公司爱加密_云平台成立于2013年研发及运营中心位于深圳同时在全国各地设立了12个分支机构拥有员工300多人。爱加密_云平台www.ijiami.cn)是专业的移动信息安全服务提供商专注于移动应用安全、大数据、物联网及工业互联网安全坚持以用户需求为导向、持续不断的创新致力于为客户提供全方位、一站式的移动安全全生命周期解决方案。爱加密_云平台的服务宗旨是通过革新性安全方案和7x24小时全天候的专业服务打造和谐、强大、高度安全的万物互联生态环境。 二、 安全性分析报告 爱加密技术团队自己研发的滑动验证码容易被模拟器绕过甚至逆向后暴力攻击滑动拼图识别率在 95% 以上。 三、 测试方法 前端界面分析这是宝马中国技术团队自己研发的滑动验证码网上没有现成的教学视频但形式都差不多 这次还是采用模拟器的方式关键点主要模拟器交互、距离识别和轨道算法3部分 1. 模拟器交互部分 private static String INDEX_URL https://cloud.ijiami.cn/admin/#/register;Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {RetEntity retEntity new RetEntity();try {driver.get(INDEX_URL);// 输入手机号WebElement phoneElemet ChromeDriverManager.waitElement(driver, By.id(form_item_mobile), 100);phoneElemet.sendKeys(phone);// 点击获取验证码WebElement sendElement driver.findElement(By.xpath(//button[contains(text(),获取验证码)]));sendElement.click();Thread.sleep(1000);// pic 1 get bigWebElement bigImgElement driver.findElement(By.xpath(//div[classverify-img-panel]/img));String bigImgUrl bigImgElement.getAttribute(src);byte[] bigBytes GetImage.callJsByUrl(driver, bigImgUrl);int bigLen (bigBytes ! null) ? bigBytes.length : 0;if (bigLen 100) {System.out.println(bigImgUrl bigImgUrl -bigLen bigLen);return null;}// pic 2 get smallWebElement smallImgElement driver.findElement(By.xpath(//div[classverify-sub-block]/img));String smallSrc smallImgElement.getAttribute(src);byte[] smallBytes GetImage.callJsByUrl(driver, smallSrc);if (smallBytes null) {System.out.println(smallBytes smallBytes);return null;}String ckSum GenChecksumUtil.genChecksum(bigBytes);MapString, Double openResult openCv2.getOpenCvDistance(ckSum, bigBytes, smallBytes, Ijiami, 0);if (openResult null || openResult.size() 2) {System.out.println(ckSum ckSum -openResult openResult);return null;}Double r 330.0 / 310;BigDecimal disD new BigDecimal(openResult.get(minX) * r).setScale(0, BigDecimal.ROUND_HALF_UP);int distance disD.intValue();WebElement moveElement driver.findElement(By.className(verify-move-block));ActionMove.move(driver, moveElement, distance);System.out.println(distance distance);Thread.sleep(1000);WebElement infoElement ChromeDriverManager.waitElement(driver, By.xpath(//button[contains(text(),秒后重发)]), 20);String info (infoElement ! null) ? infoElement.getText() : null;retEntity.setMsg(info);if (info ! null info.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;}} 2. 获取滑动图片及调用移动交互 public boolean getAndMove(WebDriver driver, Integer offSet) {int distance -1;try {WebElement moveElement ChromeDriverManager.waitElement(driver, By.className(geetest_slider_button), 1000);if (moveElement null) {logger.error(getAndMove() moveElement moveElement);return false;}// 下面的js代码根据canvas文档说明而来// 完整背景图geetest_canvas_fullbg geetest_fade geetest_absoluteStringBuffer base64 new StringBuffer();String fullName geetest_canvas_fullbg geetest_fade geetest_absolute;byte[] fullImg GetImage.callJsByName(driver, fullName, base64);String bgName geetest_canvas_bg geetest_absolute;byte[] bgImg GetImage.callJsByName(driver, bgName, base64);File fullFile null, bgFile null;if (fullImg ! null bgImg ! null) {Long time System.currentTimeMillis();fullFile new File(dataPath geet/ time full.png);FileUtils.writeByteArrayToFile(fullFile, fullImg);bgFile new File(dataPath geet/ time bg.png);FileUtils.writeByteArrayToFile(bgFile, bgImg);if (fullImg.length 10000) {System.out.println(fullImg len fullImg.length - err[len10000]);return false;}}// 获取滑动距离并删除图片distance (fullFile ! null bgFile ! null) ? ActionMove.getMoveDistance(fullFile.getAbsolutePath(), bgFile.getAbsolutePath()) : -1;if (distance 1) {logger.error(getAndMove distance distance);return false;}if (offSet ! null)ActionMove.move(driver, moveElement, distance - offSet);elseActionMove.move(driver, moveElement, distance);// 滑动结果Thread.sleep(1 * 1000);WebElement infoElement ChromeDriverManager.getInstance().waitForLoad(By.className(geetest_result_content), 10);String gtInfo (infoElement ! null) ? infoElement.getAttribute(innerText) : null;if (gtInfo ! null) {System.out.println(gtInfo gtInfo);if (gtInfo.contains(速度超过) || gtInfo.contains(通过验证)) {return true;}} else {String msg driver.findElement(By.className(geetest_panel_success_title)).getAttribute(innerText);System.out.println(msg msg);}return false;} catch (Exception e) {System.out.println(getAndMove() e.toString());logger.error(e.toString());return false;}}3. 距离识别 /*** 计算需要平移的距离* * param fullImgPath* 完整背景图片文件名* param bgImgPath含有缺口背景图片文件名* return* throws IOException*/public static int getMoveDistance(String fullImgPath, String bgImgPath) {System.out.println(fullImgPath fullImgPath);File fullFile new File(fullImgPath);File bgFile new File(bgImgPath);boolean fullExists fullFile.exists();boolean bgExists bgFile.exists();if (fullExists bgExists) {String abPath bgFile.getAbsolutePath();int l abPath.lastIndexOf(.);String out abPath.substring(0, l) -o abPath.substring(l);return getComareImg(fullFile, bgFile, out);} else {System.out.println(fullExists( fullImgPath ) fullExists \nbgExists( bgImgPath ) bgExists);return -1;}}/*** 计算需要平移的距离* * param driver* param fullImgPath完整背景图片文件名* param bgImgPath含有缺口背景图片文件名* return* throws IOException*/private static int getComareImg(Object fullObj, Object bgObj, String out) {System.out.println(getComareImg() begin);try {if (fullObj null || bgObj null) {return -1;}BufferedImage fullBI (fullObj instanceof File) ? ImageIO.read((File) fullObj) : ImageIO.read((ByteArrayInputStream) fullObj);BufferedImage bgBI (bgObj instanceof File) ? ImageIO.read((File) bgObj) : ImageIO.read((ByteArrayInputStream) bgObj);ListInteger list;Color ca, cb;MapInteger, ListInteger xMap new TreeMapInteger, ListInteger();// 将头35列的最大不同值取出 作为右边图像的基础差Long tifTotl 0L;int tifLeft 0;int tifCount 0;for (int i 0; i bgBI.getWidth(); i) {for (int j 0; j bgBI.getHeight(); j) {ca new Color(fullBI.getRGB(i, j));cb new Color(bgBI.getRGB(i, j));int diff diff(ca, cb);if (i 35 tifLeft diff) {tifLeft (diff 255) ? 255 : diff;} else if (diff tifLeft) {tifTotl diff;tifCount;}}}Long tifAvg (tifCount 0) ? (tifTotl / tifCount) : 0L;if (tifLeft 0 tifAvg 2) {tifAvg tifAvg / 2;}for (int i 35; i bgBI.getWidth(); i) {for (int j 0; j bgBI.getHeight(); j) {ca new Color(fullBI.getRGB(i, j));cb new Color(bgBI.getRGB(i, j));int diff diff(ca, cb);if (diff tifAvg) {list xMap.get(i);if (list null) {list new ArrayListInteger();xMap.put(i, list);}list.add(j);xMap.put(i, list);}}}System.out.println( |--tifLeft tifLeft ,tifTotl tifTotl ,tifCount tifCount ,tifAvg tifAvg ,xMap.size xMap.size());int minX 0;int maxX 0;for (Integer x : xMap.keySet()) {list xMap.get(x);minX (minX 0) ? x : minX;maxX x;for (int y : list) {cb new Color(bgBI.getRGB(x, y));int gray (int) (0.3 * cb.getRed() 0.59 * cb.getGreen() 0.11 * cb.getBlue());bgBI.setRGB(x, y, gray);}}// 标记直线位置for (int y 0; y bgBI.getHeight(); y) {bgBI.setRGB(minX, y, Color.red.getRGB());}int width maxX - minX;File destFile new File(out);Thumbnails.of(bgBI).scale(1f).toFile(destFile);System.out.println( |---xMap.size xMap.size() minX minX ,maxX maxX ,width width);return minX;} catch (Exception e) {System.out.println(e.toString());for (StackTraceElement elment : e.getStackTrace()) {System.out.println(elment.toString());}logger.error(getMoveDistance() err e.toString());return 0;}}private static int diff(Color ca, Color cb) {int d Math.abs(ca.getRed() - cb.getRed()) Math.abs(ca.getGreen() - cb.getGreen()) Math.abs(ca.getBlue() - ca.getBlue());return d;}4. 轨道生成及移动算法 /*** 双轴轨道生成算法主要实现平滑加速和减速* * param distance* return*/public static ListInteger[] getXyTrack(int distance) {ListInteger[] track new ArrayListInteger[]();// 移动轨迹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;// 每次循环移动的距离ListInteger[] subList new ArrayListInteger[]();// 移动轨迹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 {ListInteger[] 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(20);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 3) {Thread.sleep(3 - 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());}}5. 图片比对结果测试样例 四丶结语 北京智游网安科技有限公司爱加密成立于2013年研发及运营中心位于深圳爱加密www.ijiami.cn)是专业的移动信息安全服务提供商专注于移动应用安全、大数据、物联网及工业互联网安全爱加密在吸取了同行滑动验证码的经验后自己研发了独特风格的那个验证码 在一定程度上提高了用户体验 但安全性在机器学习的今天 已经无法应对攻击了并且正是由于该产品通俗 所以在网上破解的文章和教学视频也是大量存在并且经过验证滑动产品很容易被破解 所以除了滑动验证方式 花样百出的产品层出不穷但本质就是牺牲用户体验来提高安全。 很多人在短信服务刚开始建设的阶段可能不会在安全方面考虑太多理由有很多。 比如“ 需求这么赶当然是先实现功能啊 ”“ 业务量很小啦系统就这么点人用不怕的 ” “ 我们怎么会被盯上呢不可能的 ”等等。 有一些理由虽然有道理但是该来的总是会来的。前期欠下来的债总是要还的。越早还问题就越小损失就越低。 所以大家在安全方面还是要重视。血淋淋的栗子#安全短信# 戳这里→康康你手机号在过多少网站注册过 谷歌图形验证码在AI 面前已经形同虚设所以谷歌宣布退出验证码服务 那么当所有的图形验证码都被破解时大家又该如何做好防御呢 相关阅读 《腾讯防水墙滑动拼图验证码》 《百度旋转图片验证码》 《网易易盾滑动拼图验证码》 《顶象区域面积点选验证码》 《顶象滑动拼图验证码》 《极验滑动拼图验证码》 《使用深度学习来破解 captcha 验证码》 《验证码终结者-基于CNNBLSTMCTC的训练部署套件》
http://www.w-s-a.com/news/202394/

相关文章:

  • 成都网站品牌设计策划课堂网站开发
  • 做直播网站赚钱公司网站空间怎么续费
  • 企业网站制作公司有哪些太原网站建设 thinkphp3.2
  • 云集网站哪个公司做的百度竞价排名怎么做
  • 做网站公司赚钱吗网站建设英语翻译
  • 网络公司除了做网站产品设计作品
  • dede网站模板替换湘潭建设路街道网站
  • 东莞网站优化效果如何网络设计工作
  • 网站备案系统验证码出错的解决方案任丘建设银行网站
  • 个人博客建站wordpress叮当app制作
  • 网站式的公司记录怎么做二手书网站策划书
  • 营销型网站的建设重点是什么帝国程序和WordPress
  • 正能量网站推荐不需要下载巴中网站建设开发公司
  • 学生模拟网站开发西安seo平台
  • 免费的app推广平台免费网站seo
  • 建一个个人网站网站建设中小企业广西
  • 优惠券网站做淘客违规吗个人建网站运营.
  • 旅游网站制作建设华大基因 网站建设
  • sem推广竞价托管南京seo网站优化
  • 网站优化网站建站教程网站建设 成都
  • 网站 配色表html代码在线
  • 城乡和建设部建造师网站众筹平台网站建设
  • 外贸网站模板免费下载微网站制作软件
  • 一个新的网站怎么做宣传技术先进的网站建
  • 福建网站建设有限公司需求网站
  • 生物科技企业网站做的比较好的企业培训网站模板
  • 南京 高端网站建设网站备案密码怎么找回
  • 蛋糕店网站模板建设电子商务系统网站
  • 海口网站建设优化公司网站开发要加班吗
  • 建设一个网站需要注意哪些要求群晖的网站开发