这个项目为什么出现?用云服务不好么?

起因是这样的.....

公司的网站经常被同行搞,ddos,cc,各种乱七八糟的方式搞,然后我们上了高防后发现使用暴力手段已经无法搞死,然后他们就开始通过技术手段开始找服务器漏洞,它们尝试了各种注入,好在我们有waf,注入不进去,然后它们就发现,可以通过刷短信直接让我们肉疼,一开始是我们没考虑刷短信问题,只是限制了IP+手机号一个小时只能发3条,没想到一天消耗了我们近万元短信费,它们的代理ip多到数不清,然后通过随机手机号+代理ip刷的飞起,限制了就换ip,我醒来发现天都塌了.......

然后我就想到了云服务的验证码,没想到只是短信刷的速度慢了一点,并且是真的贵,一次大概1分钱,再加上我们的短信3分钱,一次成本就4分钱,赶上短信3/1的价格了

然后我就在想,能不能自己开发一个验证码系统,做成我顺便公开出来,让大家一起帮我完善我的机器人检测数据库,顺便吧接入方式弄的简单一些,然后再免费(同行搞我们的原因就是我们太喜欢搞免费了haha)



你的验证码就可以防住机器人么?

目前云服务的验证码基本都是拼图,但是如果搞事情的人愿意搞你,其实可以通过yolo方式暴力找拼图的位置
虽然说云服务的拼图验证码还要一层轨迹识别,但是现在随便写个脚本就可以模拟出人速度不均匀的轨迹数据

所以说我想到一个骚操作(其实google亚马逊等国外大平台早就用了)就是ai对空间性和场景同时解读不太可以(除非那种大模型),为了搞你杀敌800自损1000来说比拼图那种杀敌1000自损100来说性价比已经很高了

比如下面这张图,人一看就知道那边是正,但是ai可能就不一定了,并且会根据可疑程度,加大难度(其实就是以前百度的活)



小玩一下?



如何对接?

HTML 部分

你没看错,html部分就这么简单,甚至不需要 <script src="xxxx ......
<div class="__Fox__captcha__"></div>

JavaScript 部分

需要调用验证码的时候直接执行下面这一坨就可以,记得先创建一个塞验证码的容器再执行,可以吧下面这一坨打包成一个函数
极致简化对接流程,前端只需要一小坨代码,甚至不需要引入js(其实是代码引入啦)
// 后面的[__Fox__captcha__] 替换成你要显示验证码的容器       使劲横向向右拉→                                                                                                                   ↓这里
document.head.appendChild(Object.assign(document.createElement("script"),{src:"//api.jihujiasuqi.com/apps/captcha/index/captcha.js?"+Date.now(),onload:()=>document.querySelector('.__Fox__captcha__').captcha({
    title: '安全验证', // 这里是标题
    desc: '拖动滑块,使图片角度为正',// 这里是提示文字
    
    
    init: (state) => {
        // 这里是验证码初始化完成的回调,验证码加载完成后将执行这个
        console.log('验证码初始化成功',state)
    },
    success: () => {
        // 验证成功后自行处理,验证完成后 complete 会返回一个id,发到服务器后端验证验证码是否正确
        console.log('验证成功');
    },
    fail: () => {
        // 验证失败自行处理,可以重新获取验证码或者关闭页面什么的,看你的项目需求
        console.log('验证失败');
    },
    complete: (state) => {
        // state 是验证完成后返回的id,发到服务器后端验证验证码是否正确,无论正确还是错误,都会有这个回调
        console.log('验证回调数据:', state)
        
        // 我这里是演示,所以说我直接刷新了,实际项目按照需求修改,别跟我一样直接刷新haha ,返回的是一个数组,里面有okey和rand,这个要传到服务器上(你的后端)来进行识别验证码是否正确
        setTimeout(() => {
            alert("回调数据:\n\nokey:"+state.okey+"\nrand:"+state.rand);
            location.reload()
        }, 500);
    }
})}));

后端

后端只需要传参okey和rand即可,如果你不知道在哪里,可以运行下demo,看一眼就知道是那个了

GET

https://api.jihujiasuqi.com/apps/captcha/server_verify.php?rand=<前端的rand>&okey=<前端的okey>

响应结果

返回json字符串
{
    "state": "ok",
    "score": 114, // [正在开发中]   验证得分(可信度),区间[0, 100]
    "success": 0 // 验证结果,1为通过,0为失败,2为超时(3分钟)
}