跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

php怎么实现滑动验证码_php如何集成极验或腾讯防水墙验证

滑动验证码必须由后端校验token,前端仅负责交互;极验v4需用lot_number、passtime、gen_time和动态签名调用verify接口,腾讯密钥须存环境变量,且需解析risk_level/evil_level做风控决策。 滑动验证码不是前端动画,后端必须校验 token 很多人把滑动验证码当成纯前端交互,拖完就放行——这是最大误区。
geetest
或
tcaptcha
的核心安全逻辑在服务端:前端拿到的
captcha_ticket
、
randstr
、
session_id
必须连同用户行为一起发到你自己的 PHP 接口,再由你用密钥向极验/腾讯服务器发起二次验证。跳过这步等于没加验证码。 实操建议: 前端提交表单时,把
geetest_challenge
、
geetest_validate
、
geetest_seccode
(极验)或
ticket
、
randstr
(腾讯)一并 POST 到你的 PHP 验证接口 PHP 接口收到后,**不直接返回成功**,而是用
file_get_contents
或
cURL
向
https://api.geetest.com/ajax.php
(极验)或
https://ssl.captcha.qq.com/ticket/verify
(腾讯)发起请求 极验需传
gt
、
challenge
、
validate
、
seccode
和你自己的
private_key
;腾讯需传
aid
、
AppSecretKey
、
Ticket
、
Randstr
、
UserIP
极验 v4 与 v3 的 PHP 验证方式完全不同 极验官网默认推 v4(
gt4
),但很多老项目还在用 v3。v4 不再返回
challenge
/
validate
三元组,而是用
lot_number
+
passtime
+
gen_time
+
sign
组合,且签名密钥是动态生成的。直接套 v3 的 PHP 示例会一直返回
fail
。 常见错误现象:
{"success":0,"message":"invalid lot_number"}
或
{"result":"error","reason":"invalid sign"}
立即学习 “ PHP免费学习笔记(深入) ”; 实操建议: v4 验证必须调用
https://gcaptcha4.geetest.com/verify
,不能复用 v3 的
ajax.php
地址 POST 参数中
lot_number
、
passtime
、
gen_time
必须原样透传,
sign
是服务端用
private_key
对前三者拼接后 HMAC-SHA256 签名(不是前端算的) 别信网上那些“改个 URL 就能从 v3 升 v4”的代码片段——签名逻辑变了,必须重写验证函数 腾讯防水墙的
AppSecretKey
不能硬编码在 PHP 里
AppSecretKey
相当于腾讯侧的 API 密钥,一旦泄露,攻击者可伪造任意用户的验证结果。PHP 文件若被意外暴露(如配置错误导致 . php 源码可下载),密钥就直接裸奔。 PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 使用场景:本地开发测试时图省事写死在
config.php
里,上线后忘了移除 实操建议: 把
AppSecretKey
存在 Web 服务器环境变量中(如 Apache 的
SetEnv TCAPTCHA_SECRET "xxx"
,Nginx 配合 php-fpm 的
env[TCAPTCHA_SECRET]
) PHP 中统一用
$_SERVER['TCAPTCHA_SECRET']
读取,绝不出现
"your_secret_key_here"
这类字符串 验证失败时,腾讯返回的
{"response":"1","err_msg":"invalid request"}
很可能是密钥为空或格式错误,先检查
var_dump($_SERVER['TCAPTCHA_SECRET'])
滑动通过 ≠ 用户可信,要结合业务做二次判断 极验和腾讯都提供「行为分」或「风险等级」字段(如极验的
risk_level
,腾讯的
evil_level
),但多数 PHP 集成代码只看
success:1
就放行。实际上,
success:1
只代表“人形操作概率高”,不代表没机器人——它可能是个训练有素的自动化脚本。 性能影响:额外解析 JSON 字段几乎无开销,但忽略它们会让风控形同虚设 实操建议: 极验 v4 返回的
data.risk_level
为
"high"
时,可拒绝登录、要求短信二次验证,或记录日志人工复核 腾讯返回的
evil_level
是 0–100 数值,建议 >60 时拦截,>30 时增加滑动难度(如换图、加轨迹校验) 不要只依赖一次滑动结果——对高频注册/登录 IP,叠加
$_SERVER['HTTP_USER_AGENT']
和
$_SERVER['REMOTE_ADDR']
做简单频控 滑动验证码的真正复杂点不在拖拽动画,而在服务端验证链路是否闭环、密钥是否隔离、风险信号是否被消费。漏掉任意一环,防的只是手动慢速试探,不是真实攻击流量。

相关文章