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

php网站开发有什么优点wordpress标签生成图片

php网站开发有什么优点,wordpress标签生成图片,上海景泰建设股份有限公司网站,亚洲一线产区二线产区精华前言 由于网站注册入口容易被黑客攻击#xff0c;存在如下安全问题#xff1a; 暴力破解密码#xff0c;造成用户信息泄露短信盗刷的安全问题#xff0c;影响业务及导致用户投诉带来经济损失#xff0c;尤其是后付费客户#xff0c;风险巨大#xff0c;造成亏损无底洞…前言 由于网站注册入口容易被黑客攻击存在如下安全问题 暴力破解密码造成用户信息泄露短信盗刷的安全问题影响业务及导致用户投诉带来经济损失尤其是后付费客户风险巨大造成亏损无底洞 所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案 但在机器学习能力提高的当下连百度这样的大厂都遭受攻击导致点名批评 图形验证及交互验证方式的安全性到底如何 请看具体分析 一、 简信CRM PC端注册入口 简介简信软件是中国专业的企业管理平台和生态式企业服务提供商专注于企业级管理软件CRM/HRM/OA/ERP等的营销、咨询、研究、实施、培训、服务致力于为全球企业提供一站式数字化服务解决方案。 其核心产品——《简信CRM》是专业级的企业客户和销售管理软件目前简信CRM标准化产品已达到千万级的用户量,开源版CRM系统下载达到300多万次, 产品已覆盖30000多家大、中、小、微型企业涉及制造业、教育业、服务业、金融业、政府机构等100多种行业。 二、 安全性分析报告 采用腾讯的智能验证包含点击和滑动验证容易被模拟器绕过甚至逆向后暴力攻击滑动拼图识别率在 95% 以上。 三、 测试方法 前端界面分析这是腾讯v2版本比较简单网上有大量的文章参考 我们采用模拟器的方式关键点主要模拟器交互、距离识别和轨道算法3部分。 1. 模拟器交互部分 private static Logger logger LoggerFactory.getLogger(Jxycrm.class);private TencentClientV2 tencentClient new TencentClientV2(tencent);private final String INDEX_URL https://cloud.jxycrm.com/pc/#/login#register;Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {RetEntity retEntity new RetEntity();try {driver.get(INDEX_URL);// 请输入公司名字WebElement corpElement driver.findElement(By.xpath(//input[placeholder请输入公司名字]));String corpName NickName.getFamily() NickName.getName()信息技术有限公司;corpElement.sendKeys(corpName);// 输入手机号Thread.sleep(1000);ListWebElement phoneElements driver.findElements(By.xpath(//input[placeholder请输入手机号]));phoneElements.get(1).sendKeys(phone);Thread.sleep(1 * 1000);// 点击获取验证码ListWebElement sendElements driver.findElements(By.id(TencentCaptcha));sendElements.get(1).click();// 计算移动距离RetEntity ret tencentClient.moveExec(driver);if (ret.getRet() -1) {System.out.println(moveExec ret ret);return null;}Thread.sleep(1 * 1000);WebElement gtElement ChromeDriverManager.waitElement(driver, By.xpath(//button/span[contains(text(),s)后可获取)]), 20);String msg (gtElement ! null) ? gtElement.getText() : null;retEntity.setMsg(msg);// 验证码已发送,请关注手机短信,5分钟内有效if (msg ! null msg.contains(s)后可获取)) {retEntity.setRet(0);}return retEntity;} catch (Throwable 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();}} public RetEntity moveExec(WebDriver driver, boolean switchTo) {RetEntity retEntity new RetEntity();retEntity.setRet(-1);if (switchTo) {// 获取到验证区域WebElement iframe ChromeDriverManager.waitElement(driver, By.id(tcaptcha_iframe), 100);if (iframe null) {System.out.println(moveExec() tcaptcha_iframe|timeout!!!);return null;}driver.switchTo().frame(iframe);}sleep(500);// 获取带阴影的背景图String bgUrl ChromeDriverManager.waitElement(driver, By.id(slideBg), 500).getAttribute(src);sleep(500);// 获取带阴影的小图WebElement webSlide ChromeDriverManager.waitElement(driver, By.id(slideBlock), 100);String sUrl webSlide.getAttribute(src);sleep(500);if (bgUrl null || .equals(bgUrl) || sUrl null || .equals(sUrl)) {System.out.println(moveExec() err: bgUrl bgUrl ,sUrl sUrl);return retEntity;}String style null;try {MapString, String outMap openCv2.getMoveDistance(tencent, bgUrl, sUrl);String distanceStr (outMap ! null) ? outMap.get(distance) : null;String width (outMap ! null) ? outMap.get(width) : null;Double left 38.0 * 680 / 340;// 起点距左边距离Double act (Double.parseDouble(distanceStr) - left - Double.parseDouble(width)) * 340.0 / 680.0;Integer distance act.intValue();System.out.println(moveExec() distance( distanceStr ) distance);// 获取滑动按钮if (distance null || distance 0) {return retEntity;}WebElement moveElemet ChromeDriverManager.waitElement(driver, By.id(tcaptcha_drag_button), 100);sleep(500);// 滑动ActionMove.move(driver, moveElemet, distance);sleep(400);// 滑动结果String gtInfo ChromeDriverManager.waitElement(driver, By.id(statusSuccess), 100).getText();if (gtInfo null || .equals(gtInfo)) {sleep(200);gtInfo ChromeDriverManager.waitElement(driver, By.id(statusError), 100).getText();}System.out.println(moveExec() gtInfo gtInfo);retEntity.setMsg(gtInfo);if (gtInfo.contains(只用了) || gtInfo.contains(无敌了)) {retEntity.setRet(0);} else if (gtInfo.contains(再试一次) || gtInfo.contains(恍惚了) || gtInfo.contains(半路丢了)) {retEntity.setRet(-1);}return retEntity;} catch (Exception e) {System.out.println(moveExec() style style , e);retEntity.setMsg(e.toString());return retEntity;}} 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;}}3. 轨道生成及移动算法 /*** 根据距离获取滑动轨迹* * param distance需要移动的距离* return*/public static ListInteger getTrack(int distance) {ListInteger track new ArrayListInteger();// 移动轨迹ListInteger[] list getXyTrack(distance);for (Integer[] m : list) {track.add(m[0]);}return track;}/*** 双轴轨道生成算法主要实现平滑加速和减速* * 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());}}4. OpenCv 轮廓匹配测试样例 四丶结语 简信软件是中国专业的企业管理平台和生态式企业服务提供商专注于企业级管理软件CRM/HRM/OA/ERP等的营销、咨询、研究、实施、培训、服务致力于为全球企业提供一站式数字化服务解决方案。其核心产品——《简信CRM》是专业级的企业客户和销售管理软件目前简信CRM标准化产品已达到千万级的用户量,开源版CRM系统下载达到300多万次, 产品已覆盖30000多家大、中、小、微型企业涉及制造业、教育业、服务业、金融业、政府机构等100多种行业拥有一定的互联网架构设计能力 采用的是通俗的滑动验证产品 该产品稳定并且市场占有率很高 在一定程度上提高了用户体验 但安全性在机器学习的今天 已经无法应对攻击了并且正是由于该产品通俗 所以在网上破解的文章和教学视频也是大量存在并且经过验证滑动产品很容易被破解 所以除了滑动验证方式 花样百出的产品层出不穷但本质就是牺牲用户体验来提高安全。 很多人在短信服务刚开始建设的阶段可能不会在安全方面考虑太多理由有很多。 比如“ 需求这么赶当然是先实现功能啊 ”“ 业务量很小啦系统就这么点人用不怕的 ” “ 我们怎么会被盯上呢不可能的 ”等等。 有一些理由虽然有道理但是该来的总是会来的。前期欠下来的债总是要还的。越早还问题就越小损失就越低。 所以大家在安全方面还是要重视。血淋淋的栗子#安全短信# 戳这里→康康你手机号在过多少网站注册过 谷歌图形验证码在AI 面前已经形同虚设所以谷歌宣布退出验证码服务 那么当所有的图形验证码都被破解时大家又该如何做好防御呢 相关阅读 《腾讯防水墙滑动拼图验证码》 《百度旋转图片验证码》 《网易易盾滑动拼图验证码》 《顶象区域面积点选验证码》 《顶象滑动拼图验证码》 《极验滑动拼图验证码》 《使用深度学习来破解 captcha 验证码》 《验证码终结者-基于CNNBLSTMCTC的训练部署套件》
http://www.yayakq.cn/news/5373/

相关文章:

  • 如何网站制作微信公众号网站自己做导航条
  • 郑州做网站公司有多少钱德州做网站建设的公司
  • 网站做游戏活动阿里云服务器ip做网站
  • 网站设计报价.doc做网站 合肥
  • 阿里云轻应用服务器 建设网站网站内页是什么意思
  • 成都网站建设详细内容这么做输入文字的网站
  • 宁波网站推广优化外包公司asp.net 网站提速
  • uemo网站平台建设免费制作软件app的网站
  • 电影推荐网站开发口碑营销的优缺点
  • 台州建网站网页设计案例教程杨松答案
  • 番禺市桥网站建设网站建设计划设计方案
  • wap自助建站排板网络运营推广方式有哪些
  • 厦门网站建设公司推荐密云网站建设
  • 深圳好的网站建安丘做网站的公司
  • 电子商务网站建设的评估邢台163信息交友
  • 苏州建设监督网站首页网站建设费入何科目
  • ps做网站编排行距网站
  • 设置个网站要多少钱七牛 wordpress 图床
  • 网站怎么建设模块centos 安装 wordpress
  • asp 网站开发 软件兰州做网站或小程序
  • 企业网站建站意义网站建设设计说明书
  • 云虚拟主机和网站建设网页素材图
  • 肇庆网站开发公司产品服务展示型网站有哪些
  • 高级网站开发工程师证书在社保网站做调动
  • wordpress删除管理站点链接专业团队广告语
  • 企业网站的维护wap浏览器在线
  • 网站新年特效什么叫营销模式
  • 购物商城网站开发实验报告网站建设合同封面模板
  • 红番茄 网站点评宣传片拍摄制作公司报价明细
  • 不同域名一样的网站网站的动态图怎么做的