铁穹接入文档

简介

铁穹是由web中间件研发组开发的一套以“设备指纹”技术为核心打造的人机对抗系统,可应用于反爬虫、登录、注册、领券、发送验证码、下单等需要做限制和风控对抗的一些场景。

同步防爬

铁穹支持同步防爬,移步:http://bps.17usoft.com/pages/viewpage.action?pageId=14697290

接入流程

  1. 引用铁穹JS SDK,推荐加上版本号使用,方便升级时清除CDN缓存。
  2. 请加载在jquery之后,如未引用jquery需添加引用。(如下段代码) ,也支持fishzepto, fish框架需要像下面示例代码,需手动增加二次验证函数.
  3. 把需要保护的请求接口代码包含到 $.td(function () {/*原代码*/}, '/td/key', '/td/cookie')
    有几处要包几处,建议把入口封装成一个入口函数,然后在入口处执行一下。
    最好让 $.td只执行一次。
  4. 叶成/金正宝申请铁穹配置,沟通接入场景对应的阈值、规则限制。
    上线一开始会使用监控模式即只记录日志,不进行拦截。在观察ok之后,才会切换到拦截模式对恶意请求进行拦截。
// 2.请加载在`jquery`之后,如未引用`jquery`需添加引用。
<script type="text/javascript" src="//file.40017.cn/leonidbucket/tdjs/leonid-tq-jq-v3-min.js"></script>

备注

  1. 引入SDK后,F12调试会被block住, 如果要调试脚本,请在file.40017.cn域名下,添加
    cookie:document.cookie = "debug=nodebug"
  2. 访问https://file.40017.cn/leonidbucket/tdjs/nodebug.html?v=2 ,方便设置不调试cookie,注意httphttpscookie不同. 加完cookie之后, 再次访问受保护页面使用ctrl + f5强刷一次.
  3. 有一些铁穹出不来验证码的问题, 请看下图。
    enter image description here

注: 仅限同程大厦

示例代码

<!--Jquery可以用项目的-->
<script type="text/javascript" src="//file.40017.cn/tcweb/pc/public/js/common/jquery/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="//file.40017.cn/leonidbucket/tdjs/leonid-tq-jq-v3-min.js?20170913"></script>
<h2>铁穹Demo</h2>
<input type="button" onclick="UserLogin()" value="登录" />
<input type="button" onclick="UserLoginNative()" value="登录(非Jquery)" />
<script>
function UserLogin() {
//执行代码包到$.td(function () {/*原代码*/}, '/td/key', '/td/cookie')中。
$.td(function () {
var url = '/Demo/UserLogin';
var parms = {
UserName: '18605120000',
UserPwd: '456345234'
};
$.ajax({
url:url,
data:params,
success: function (data) {
alert('提示信息' + data);
}
});
}, '/td/key', '/td/cookie')
//备注:请注意移动端接入防爬虫需 /td/key 写为 /td/key/ua
}
</script>
<!--以下是非Jquery请求代码-->
<script type="text/javascript" src="//js.40017.cn/cn/min/??/cn/public/fish.1.5.1.js,/cn/public/fc.1.1.6.js?v=131225061"></script>
<script>
function UserLoginNative() {
//执行代码包到$.td(function () {/*原代码*/}, '/td/key', '/td/cookie')中。
$.td(function () {
var url = '/Demo/UserLogin';
var parms = {
UserName: '18605120000',
UserPwd: '456345234'
};
fish.ajax({
url: url, openType: "post", data: parms, fn: function (respBody) {
//非Jquery请求,需要在回调时用这个函数验证下
if (!window.leonidTqAjaxCallback(respBody)) {
console.log("铁穹未验证通过");
return;
}
alert("Native-" + respBody);
}
});
}, '/td/key', '/td/cookie', function(err){
//二次验证回调函数(仅在开启iframe二次验证功能有效), 可不传入此参数
//默认的二次验证回调函数如下
//用户可以在一些例如登录场景下,重写这个二次验证回调函数
//可以达到二次验证成功,模拟登录按钮再次点击,避免用户重复输入用户名和密码
if(err){
console.log(err);
}
location.href = location.href;
})
//备注:请注意移动端接入防爬虫需 /td/key 写为 /td/key/ua
}
</script>

触发

铁穹判断请求有恶意之后,根据相应 的配置会

  1. 直接返回400响应码,对应请求不会转发给后端接口。Alt text

  2. 触发滑动验证码二次验证,如果恶意情况比较明显,会触发难度更高的文字点选验证码。Alt text

接入和上线流程

注意: 以下所有流程,需要在预发先演练一次,确认无误之后,再上线配置!!!
  1. 在狮子座上配置需要接入的应用域名 例如:接入域名为 www.ly.com,接入路径为/hotel/roomprice
    1.1. 在狮子座上配置www.ly.com/td/key/td/cap/valid 的配置 (可使用克隆功能, 以防出错)
    1.2. 在狮子座上配置 tlb中,对应 /hotel/roomprice 路径的源服务器, 注意配置运维的 upstream名称需要和tlb对应, 这样才能同步更新服务器信息, 规则为tlb-{tlb域名分组id}-{tlb里的upstream名称},例如:tlb-7-jpebook_ly_com
    1.3. 在狮子座上配置 /hotel/roomprice 路劲的配置信息, 服务器指向 1.2 步骤配置的服务器, 不开启防爬
    1.4. 使用线上堡垒机, 发送命令 curl -H "Host: www.ly.com" http://172.16.199.110:6102/hotel/roomprice 验证配置是否生效
  2. tlb 系统配置
    2.1. 在 tlb 中为域名www.ly.com 添加配置 /td/这个 location 配置, 送到狮子座机器
    2.2. 在 tlb 中为域名www.ly.com 添加配置 /hotel/roomprice这个 location 配置, 送到狮子座机器
    2.3. 验证 www.ly.com/hotel/roomprice 是否可以正常打开, 响应头中是否有狮子座特征响应头leonid-*
  3. 项目修改代码上线
    3.1. 项目前端按上面的文档接入铁穹, 把代码包在 $.td
    3.2. 项目代码上线, 然后观察是否有异常,
  4. 在狮子座后台配置中,开启铁穹防爬, 并调整参数, 观察是否有异常
  5. 上线完成

enter image description here

铁穹主要拦截码

-- -9 getIpLevel 指纹 错误,放过
-- -8 getIpLevel ip地址 错误,放过
-- -7 表示获取key时,获取cookie对象失败
-- -6 获取正则跳转验证码地址错误
-- -5 系统出现异常,强制全部放过
-- -4 狮子座白名单,放过
-- -3 出错临时放过
-- -2 表示基础白名单或者系统出错了
-- -1 表示白名单
-- 2 跳转去验证码
-- 22 需要验证码认证,并且有验证码的cookie,但是cookie不正确,需要跳过去重新验证
-- 3 表示 redis ip 黑名单
-- 4 表示 redis fp 黑名单
-- 99 正常通过
-- 98 老的ip或者老的ua和新的ip和ua不匹配,但是使用noua匹配通过
-- 97 获取key接口,正确响应
-- 101 表示没有ua
-- 102 cookie检查错误
-- 104 没有deviceid
-- 105 两次deviceid深度检查都出错
-- 106 当前did被关紧闭了,关在了当前的sharedict中
-- 107 当前did被塞入了redis的黑名单中
-- 108 当前deviceid访问太过于频繁
-- 109 ua 命中黑名单
-- 110 referer 不存在
-- 111 referer 主机头不正确
-- 113 验证码 did 不匹配
-- 114 验证码 cookie ts 超时
-- 115 验证码 cookie 解密失败
-- 116 老的ip或者老的ua和新的ip和ua不匹配,但是使用同一个did请求
-- 117 did 解密出来的随机数不正确
-- 118 did 的随机数和 session 不匹配
-- 119 did 的随机数解密失败
-- 120 did 的上一次请求ip和指纹解密失败
-- 121 did 整体解密失败
-- 122 获取用户上次请求的真实IP失败
-- 123 获取用户的唯一设备指纹失败
-- 124 指纹识别失败指纹等于err错误的指纹
-- 130 获取 sessionkey cookie 失败
-- 131 session key cookie 没有
-- 132 session key cookie 不是有效的base64格式
-- 133 sessin key 签名验证失败
-- 134 session key 过期了
-- 135 session key 随机数无效
-- 141 请求key接口,没有s1加密串
-- 142 请求key接口,没有s2签名串
-- 143 请求key接口,没有fp指纹
-- 144 请求key接口,没有时间戳
-- 145 请求key接口,时间戳过期
-- 146 请求key接口,s1 解密失败
-- 147 请求key接口,缺少必要参数
-- 148 请求key接口,指纹伪造
-- 149 请求key接口,指纹签名对比失败
-- 150 请求key接口,本地httpLocalProxy,比如fiddler等
-- 201 lastKey出错或未找到,临时放过
-- 202 redis连接出错,临时放过
-- 203 redis lrange 操作出错,临时放过