公众号专注于技术领域,欢迎关注
滑动验证码相比于传统的图片验证码有了更强的安全性,对我们的网站保驾护航提供了跟好的防御措施,主要是加入了人机交互的设计模式,别看这一个小小的滑动,可不是一般平台能够搞出来的哟,很多都要借助第三方,目前大家看到的网站很多都加入了这个滑动验证码,想给自己的网站搞一个么,今天就来介绍一下这个玩法。
滑块验证码主要的作用是方便用户进行快捷验证操作,但是同时要合理的辨别到底是机器操作还是人工操作,这一点显得难度比较大,是属于人机识别的智能开发范畴,所以相对于之前的传统4位或者6位图片验证码来说,开发起来显得更加困难,所以一般来说都会接入一些第三方的Api来辅助开发人员进行滑块识别和验证。主要是根据用户在页面内的一些鼠标点击,停留,滑动距离等信息,综合来断定这个滑动操作是否是人为发起的。本文将结合阿里云的滑块验证技术来实现网站安全登录操作。
进入阿里云的云盾·数据风控·人机识别,配置管理里面添加对应的服务
可以在系统集成板块找到你想要的代码
根据语言需求下载对应的sdk
将上面图片中的代码放到一个定义的html里面
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <!-- 国内使用 --> <script type="text/javascript" charset="utf-8" src="//g.alicdn.com/sd/ncpc/nc.js?t=2015052012"></script> <!-- 若您的主要用户来源于海外,请替换使用下面的js资源 --> <!-- <script type="text/javascript" charset="utf-8" src="//aeis.alicdn.com/sd/ncpc/nc.js?t=2015052012"></script> --> </head> <body> <div id="your-dom-id" class="nc-container"></div> <!--No-Captcha渲染的位置,其中 class 中必须包含 nc-container--> <!--构建数据传递到后台--> <div class="container"> <form action="html.php" method="post"> <input type='hidden' id='nc_token' name='nc_token'/> <input type='hidden' id='csessionid' name='csessionid'/> <input type='hidden' id='scene' name='scene'/> <input type='hidden' id='sig' name='sig'/> <div class="ln"> <input type="submit" value="提交"> </div> </form> </div> <script type="text/javascript"> var nc_token=["CF_APP_1", (new Date()).getTime(), Math.random()].join(':'); var NC_Opt={ renderTo: "#your-dom-id", appkey: "CF_APP_1", scene: "register", token: nc_token, customWidth: 300, trans:{"key1":"code0"}, elementID: ["usernameID"], is_Opt: 0, language: "cn", isEnabled: true, timeout: 3000, times:5, apimap: { // 'analyze': '//a.com/nocaptcha/analyze.jsonp', // 'get_captcha': '//b.com/get_captcha/ver3', // 'get_captcha': '//pin3.aliyun.com/get_captcha/ver3' // 'get_img': '//c.com/get_img', // 'checkcode': '//d.com/captcha/checkcode.jsonp', // 'umid_Url': '//e.com/security/umscript/3.2.1/um.js', // 'uab_Url': '//aeu.alicdn.com/js/uac/909.js', // 'umid_serUrl': 'https://g.com/service/um.json' }, callback: function (data) { window.console && console.log(nc_token) window.console && console.log(data.csessionid) window.console && console.log(data.sig) //组装数据到后台 document.getElementById('nc_token').value=nc_token; document.getElementById('csessionid').value=data.csessionid; document.getElementById('sig').value=data.sig; } } var nc=new noCaptcha(NC_Opt) nc.upLang('cn', { _startTEXT: "请按住滑块,拖动到最右边", _yesTEXT: "验证通过", _error300: "哎呀,出错了,点击<a href=\"javascript:__nc.reset()\">刷新</a>再来一次", _errorNetwork: "网络不给力,请<a href=\"javascript:__nc.reset()\">点击刷新</a>", }) </script> </body> </html>
以PHP语言为例获取参数并验证。
<?php include_once './aliyun-php-sdk-core/Config.php'; use afs\Request\V20180112 as Afs; //YOUR ACCESS_KEY、YOUR ACCESS_SECRET请替换成您的阿里云accesskey id和secret ,这里从阿里云控制台的个人中心下面去获取 $iClientProfile=DefaultProfile::getProfile("cn-hangzhou", "YOUR ACCESSKEY", "YOUR ACCESS_SECRET"); $client=new DefaultAcsClient($iClientProfile); DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "afs", "afs.aliyuncs.com"); $request=new Afs\AuthenticateSigRequest(); $request->setSessionId("xxx");// 必填参数,从前端获取,不可更改,android和ios只传这个参数即可 $request->setToken("xxx");// 必填参数,从前端获取,不可更改 $request->setSig("xxx");// 必填参数,从前端获取,不可更改 $request->setScene("xxx");// 必填参数,从前端获取,不可更改 $request->setAppKey("xxx");//必填参数,后端填写,和前端的AppKey保持一致 $request->setRemoteIp("xxx");//必填参数,后端填写 $response=$client->getAcsResponse($request);//返回code 100表示验签通过,900表示验签失败 print_r($response);
浏览器输出结果,下面结果表示验证成功,现在一般来说就可以创建一个session标识验证成功,前台点击登录就可以放行了,这些操作就是结合我们具体的业务场景灵活实现了。
今天的分享就到这里,喜欢的话给个转发关注吧!
近,我读到了一位国外程序员的文章,他提出了一个有趣的问题:在 JavaScript 时代,我们是否又回到了 PHP 的老路上?作为一名前端开发者,我对这个话题深有感触,今天就想和大家分享一下我的思考。
说起 PHP,相信很多老开发者都有深刻的记忆。PHP 曾经是 Web 开发的王者,几乎所有动态网站的后端都是用 PHP 构建的。那时候,PHP 就像是一把万能钥匙,解决了我们很多实际问题。即使到了今天,PHP 仍然在很多大型项目中扮演重要角色,比如 Facebook 最初是用 PHP 构建的,后来演变成 PHP 的变种 Hack。这说明 PHP 的影响力依然深远。
但是,随着时间的推移,JavaScript 崛起了。特别是 Node.js 的出现,让 JavaScript 不再仅仅局限于浏览器端,而是成为了全栈开发的利器。像 Uber 这样的公司就用 Node.js 来处理服务器和客户端的操作,展示了 JavaScript 的强大。
最近几年,Next.js 成为了前端开发的新宠。它不仅继承了 React 的灵活性,还结合了服务器端渲染的优势,简化了开发流程。可以说,Next.js 就像是 PHP 和 JavaScript 之间的一座桥梁。举个例子,Hulu 就使用 Next.js 来简化服务器端渲染和客户端交互,提供了现代化的用户体验。这种体验让我们不禁想起了 PHP 和 HTML 的经典组合,但却拥有现代技术的强大功能。
有人说,JavaScript 的这些发展让人感觉像是回到了 PHP 的时代,但我不这么认为。JavaScript 早已不是那个只能做简单交互的小工具,而是成为了 Web 开发的全能选手。现在,像 Next.js 这样的工具不仅提供了 PHP 曾经的简便性,还带来了更多功能,如缓存和服务器端渲染,大大简化了开发流程。Netflix 就通过使用 Node.js 实现服务器端渲染,确保了快速响应的用户界面,这在过去是需要多种技术才能实现的。
随着技术的不断进步,Web 开发的未来趋势是功能的整合和开发过程的简化。我们不再需要在多种语言和系统之间切换,现代框架提供了一站式解决方案。比如 Shopify 的 Hydrogen 框架,通过无缝集成后端和前端,极大地简化了开发流程,提高了效率。
总的来说,Web 开发的演变并不是简单地回到过去,而是通过利用 JavaScript 的强大功能,突破了旧的限制,为未来更统一和高效的 Web 应用奠定了基础。这是一种上升的螺旋,而非原地打转。
你在开发过程中是否也感受到了这种变化?你对现代 JavaScript 中 PHP 风格模式的回归有什么看法?欢迎在评论区分享你的经验和见解,我们一起讨论 Web 开发的未来!
文深入探讨如何运用PHP高效获取网页HTML元素信息。
运用文件读取函数,获取网页数据。
利用PHP脚本的强大功能,网页数据的采集中极为便捷,各类网页元素亦可转化为字符形式线上展现。
2.使用正则表达式匹配目标元素
面对诸多网页需求,巧妙运用正则表达式可以精准且迅速搜寻并提取所需的HTML元素。核心技术在于结合正则表达式与网页数据,以实现精确筛选及获取这些元素的目的。
3.使用DOMDocument类解析网页
借助 DOMDocument 类,PHP 为我们提供了深入分析和处理网页的途径。该类功能强大且易用,尤其以其精准读取 HTML 文档树及其灵活操作的表现,在准确获取所需元素方面具有显著优势。
4.使用Simple HTML DOM库
对于正则表达式和DOMDocument类的初学者而言,可能会遭遇困难。为提升工作效率,可尝试借助于诸如Simple HTML DOM这类第三方工具。该工具能准确挖掘所需HTML元素,大幅缩减项目开发时间。
5.使用XPath查询语言
凭借其卓越性能,XPath在应对XML及HTML文档元素抽取任务中表现非凡,为我们提供了对HTML元素的精准与灵动操纵。
6.使用cURL库发送HTTP请求
借助PHP中cURL库的功能优势,我们能够精确满足各种网络页面内容获取和模拟仿真的需求,从而突出页面关键信息的精度提取。
7.处理JavaScript生成的内容
针对个性化需求,运用JavaScript也可实现网站内容的动态生产。为高效达成此目的,我们能依赖于PHP所提供的两种无头浏览器工具包——Selenium以及PhantomJS。
8.处理AJAX请求返回的数据
为了实现在网页间的数据交互和沟通,尤其是借助AJAX技术模拟网络传输和数据获取过程的各项操作,我们会充分利用PHP中独有的CURL模块和众多第三方厂商开发的高效能库,它们将会成为你处理海量信息的强大后盾。
9.使用API接口获取数据
若目标网站具备API访问许可,那么仅需根据接口文档所指定的请求参数,便可自动获取并拆分JSON或者XML格式的回馈数据,进而达到信息交换的目标。
10.注意事项和其他方法
在获取网页中的HTML元素时,需要注意以下几点:
-确保目标网页存在且可访问;
-遵守目标网站的使用规则和法律法规;
-防止对目标网站造成过大的访问压力;
-根据具体需求选择合适的方法和工具。
运用此策略,能精准提取所需HTML组件,为构建多样化应用及特性提供强大后盾。盼望本文能对您在PHP开发过程中网页元素搜寻有所裨益。
*请认真填写需求信息,我们会在24小时内与您取得联系。