拒绝黄牛
1、语意问答题
我们在做秒杀的的时候,在点击抢购按钮的时候,为了防止机器人和老黄牛自动抢购,会设置一系列的阻碍机器人请求的步骤。
像我们设置的问答就是典型的方案, 让机器人无法猜测到答案,只能通过人工去确认正确答案。 这样防止机器人自动抢购。
如下面的题图:
看到这个题目,人们很清楚的就能可以做出判断,机器人很难知道语义的意境。
为了防止机器人,
把问答的题目,每次活动都重新设置问答题目,这样就可以有效的防止机器人。
2、视听问答题
颜色、语音、图片
通过上面这两个说明,开阔了我们思维,真正要在项目中使用,还要进行代码的编写。
看程序代码
每一步的请求一定要关联起来,先请求 check__status 这个接口,如果这个接口请求成功,则 getQestion 获取问题,
这样做的好处,就是为了防止跳过接口、直接去后台请求。
问答题逻辑
1、获取到题目、随机选择一道题目
2、选择的题目获取题库中 随机的4道题
把这四道题种的一道题 的问题 和 答案 拿出来,
把剩下的三道题中的答案拿出来,和上边一题的答案 拼装在一个数组中,通过array_shffle 打乱顺序,返回。
把ask 答案通过一定的加密算法,同时返回到客户端
这里再次添加一个时间戳, 添加时间戳是 验证用户时长。
最后把整体题目 json 返回 。
可以明文返回用于渲染页面,但是不要包含答案;再密文返回一个包含答案的,验证答案的时候,提交密文到服务器。
3、验证问答题是否正确?
通过密文 得到问题、和答案, 验证用户提交的答案是否与正确答案一致,如果一致,放行。
否则提醒用户 问答 错误。
上边设置了一个时间,我们在验证正确答案的时候,这也是需要进行验证时间的,不要时间太长。 这里设置 300 秒
解决刷问题的方法
每个人获取到的问题数量是要限制的,否则很容易被全部获取和分析,失去问题的保密性
1、每个人生成问答题,是否有作答? 如果没有 则这次再次生成这个问题; 如果已经作答,回答是否正确?正确 则下一次
通过上面的模型,防止用户刷我们的题库、失去保密性。
至于问题 保存在哪里?
1、cookie 客户端 建议 保存在cookie
2、服务器端 ? 这个相对来说比较复杂
点触式验证码