网易易盾 NECaptcha
网易易盾 NECaptcha 是 NetEase Yidun (NECaptcha) 的无感打分 / 滑块拼图 / 点选文字 / 障碍躲避(拖动式小游戏)。一条「请完成安全验证」的横条按钮(PC 默认 float 内嵌,移动端默认 popup 弹出)。低风险点一下就通过;高风险弹出增强版滑动拼图(滑块在拖动时会旋转并走曲线路径)、语序选词点选,或需要拖着滑块躲开障碍物。
也叫 NECaptcha(网易易盾的英文产品名)。调用时 type 一律传 yidun。
接口规格
| 项目 | 值 |
|---|---|
| type | yidun |
| 必填参数 | website_urlwebsite_key |
| 可选参数 | captcha_iduser_agent |
| 返回 | 一个 token 字符串(solution.token) |
| 怎么用这个解 | 回填目标站的校验参数 |
| 价格 | $1.53 / 1K 次 —— 按成功计费,没解出来退款 |
| 厂商文档 | NetEase Yidun (NECaptcha) 官方文档 |
参数去页面哪里取
下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。
先确认是易盾:页面 <script> 里有 https://cstaticdun.126.net/load.min.js(通常带 ?t=<分钟级时间戳>);Console 里 typeof initNECaptcha 返回 "function"。实测网易易盾官方体验页 dun.163.com/trial/sense 的 HTML 里就是这一条 src。
取 captchaId(填进我们的 `website_key`,32 位字符串),三个位置:
① 最可靠——看网络请求。 DevTools Network 过滤 dun.163,组件初始化打出的第一个请求就是:https://c.dun.163.com/api/v2/getconf?referer=...&captchaId=<32位>&https=true&version=...&width=...
query 里的 captchaId 直接抄。
② 看 JS 配置:全文搜 initNECaptcha(,第一个 config 对象里的 captchaId 键:
initNECaptcha({
captchaId: '从易盾申请的captchaId',
element: '#captcha',
mode: 'float',
width: '320px'
}, onload, onerror)③ 表单提交模式下页面上有隐藏域(官方文档示例):
<input type="hidden" name="captchaId" value="从易盾申请的captchaId">这是易盾少见地把 key 放进 DOM 属性的场景,document.querySelector('input[name=captchaId]').value 一行就能取。
取到之后可以自测(我实测过):
curl "https://c.dun.163.com/api/v2/getconf?captchaId=<你的ID>&https=true&width=320&callback=cb" -H "Referer: <目标站>"ID 无效会回 cb({"error":432,"msg":"invalid business captchaId="});。
可选参数 `user_agent`:填你后续业务请求要用的那个 UA。易盾二次校验接口收一个 clientUa 字段,用来判断验证与提交之间有没有换过浏览器/设备——两边 UA 不一致会被判失败。同理它还收 clientIp,所以求解与提交最好走同一出口。
`website_url` 填验证码所在页的完整地址(含路径)。
调用示例
一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。
curl -X POST https://api.everyinfra.com/api/v1/captcha \ -H "Authorization: Bearer omg_你的KEY" \ -H "Content-Type: application/json" \ -d '{"type":"yidun","website_url":"<website_url>","website_key":"<website_key>"}'
{ "solution": { "token": "…" }, "billing": { "charged": true, "credits": 110 }}
怎么确认目标站用的就是它
采集用户验证过程中的行为轨迹、设备环境与网络访问数据做多模态建模,智能切换验证难度;通过后前端拿到一张一次性票据(NECaptchaValidate),业务后端带 captchaId + validate 调易盾二次校验接口 `http://c.dun.163.com/api/v2/verify` 确认,票据默认 20 分钟内有效且只能校验成功一次。
容易搞混的
最容易和极验 GeeTest 搞混——两者都是中国大陆站点上的高频选项,滑动拼图的视觉形态也接近。唯一可靠判据是脚本域名:cstaticdun.126.net/load.min.js + 全局函数 initNECaptcha 是易盾;static.geetest.com + initGeetest4 是极验。另外别把它和网易易盾的「短信上行验证码」混为一谈,那是另一条产品线。
常见部署场景
- 政务与公共机构:厂商官网「客户案例」栏直接列出外交部、国家大剧院
- 金融证券:中信证券
- 物流:申通快递
- 网易自有产品线:网易云音乐、网易游戏、网易邮箱、有道
- 典型环节(厂商官网「应用场景」):注册防垃圾账号、短信接口防刷、登录防撞库、提交防刷单、投票防作弊
已知的坑
同一样东西在三个地方三个名字,最容易取错。 站点标识:前端配置里叫 captchaId,隐藏域 name 也叫 captchaId(这个是给我们的)。解出来的票据:onVerify(err, data) 回调里叫 data.validate,而表单提交与服务端二次校验时那同一个值叫 NECaptchaValidate(这个是我们给你的)。别把 NECaptchaValidate 当成要传进来的参数。
脚本 URL 上的 ?t=1903281201 是官方建议加的分钟级时间戳,纯粹为了绕开浏览器长缓存,不是站点参数、不要抄进来当 key。
票据一次性且有时限:默认 20 分钟,站点可在易盾后台配成 1~20 分钟;重复校验会直接返回不通过。拿到就提交,不要囤。
站点若配了 mode: 'popup',验证码平时不在页面上、要点业务按钮才弹出——但 captchaId 在页面 JS 里已经存在了,不用等它弹出来再找。
老文章里会出现 c.dun.163yun.com 这个域名(2020 年前后的 PHP 接入示例),现行域名是 c.dun.163.com;照旧域名去抓包会什么都过滤不到。
「易盾」是网易整套安全品牌的名字,同一个 support.dun.163.com 文档站下还有内容安全、号码认证等产品线,它们共用 secretId/signature/nonce 那套签名参数。搜到的资料一半在讲内容审核,别把号码认证的参数表当成验证码的。
常见问题
网易易盾 NECaptcha 要传哪些参数?
必填 website_url、website_key;可选 captcha_id、user_agent。请求里 type 传 yidun。
解出来的东西怎么用?
返回一个 token 字符串,取 solution.token。回填目标站的校验参数
clientUa 要去页面的哪里找?
重点找 clientUa、clientIp、dun.163。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。
怎么确认目标站用的就是 网易易盾 NECaptcha?
最容易和极验 GeeTest 搞混——两者都是中国大陆站点上的高频选项,滑动拼图的视觉形态也接近。唯一可靠判据是脚本域名:cstaticdun.126.net/load.min.js + 全局函数 initNECaptcha 是易盾;static.geetest.com + initGeetest4 是极验。另外别把它和网易易盾的「短信上行验证码」混为一谈,那是另一条产品线。
有什么容易踩的坑?
同一样东西在三个地方三个名字,最容易取错。 站点标识:前端配置里叫 captchaId,隐藏域 name 也叫 captchaId(这个是给我们的)。解出来的票据:onVerify(err, data) 回调里叫 data.validate,而表单提交与服务端二次校验时那同一个值叫 NECaptchaValidate(这个是我们给你的)。别把 NECaptchaValidate 当成要传进来的参数。
多少钱一次,失败扣不扣?
$1.53 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。