使用背景:由于一款游戏经常会被盗号,小号肆虐,会对游戏的正常运营产生很负面的影响,急需找一款风控产品来解决这个问题。
那么,这些行为都有哪些特征呢?
盗号,基本都是暴力破解,撞库后异地登录;工作室操控海量小号,那么,基本是会用脚本去处理,不会触碰到页面(也就是非真人登录),而且很有可能会共用相同的IP。
业务风控
业务风控,包含:注册防控、登录防控、活动防控、消息防控和其他风险防控,通过用户行为、软硬件环境信息、设备指纹、业务基础信息综合判定用户请求的风险程度。
- WEB网页:页面引入JS脚本,服务端调用业务风险防控API获得风险结果。
- 移动端HTML5页面:页面引入JS脚本,服务端调用业务风险防控API获得风险结果。
- Android/iOS: 客户端集成SDK组件,服务端调用业务风险防控API获得风险结果。
如何集成代码? 拿登录防控举例子.
参考:应用代码集成
客户端页面这边写得很清楚,主要修改了以下:
<script> pointman.use('do', function () { var afs = pointman.getConfig(); var afs_appkey = afs.appkey; var afs_scene = afs.scene; var afs_token = afs.token; console.log('afs_appkey: ' + afs_appkey); console.log('afs_scene: ' + afs_scene); console.log('afs_token: ' + afs_token); //document.getElementById('afs_scene').value = afs_scene; //document.getElementById('afs_token').value = afs_token; window.localStorage.setItem("afs_scene",afs_scene); window.localStorage.setItem("afs_token",afs_token); }); </script>
以上这段写在body体里。
获取的时候,这样获取:
//发送AJAX请求 $.post(url, {"userName" : username, "password" : $.md5(password), "token":window.localStorage.getItem("afs_token")})
服务端,在你自己的LoginController中,接到请求后,访问登录防控API,我们用的是web方式:
@Service public class PreventionManager { private static final Logger logger = LogManager.getLogger(PreventionManager.class); IAcsClient client = null; public void init() { IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "ACCESS_KEY", "ACCESS_SECRET"); // YOUR ACCESS_KEY、YOUR // ACCESS_SECRET请替换成您的阿里云accesskey // id和secret client = new DefaultAcsClient(profile); try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Jaq", "jaq.aliyuncs.com"); } catch (ClientException e) { logger.error(e.getMessage(), e); } } public void handleLogin(HttpServletRequest req, String jsToken) { User user = SessionUtil.getCurrentUser(); LoginPreventionRequest request = new LoginPreventionRequest(); // 必填参数 request.setPhoneNumber(""); request.setIp(user.getLastLoginIp()); request.setProtocolVersion("1.0.1"); request.setSource(1); // 登录来源。1:PC网页;2:移动网页;3:APP;4:其它 request.setJsToken(jsToken); // 对应前端页面的afs_token,source来源为1&2&4时,必填; // request.setSDKToken(""); //对应sdk中获取的wtoken,source来源为3时,必填; // 选填参数 request.setEmail(user.getEmail()); request.setUserId(String.valueOf(user.getId()));//【phone_number ,email, (user_id,id_type)三种必选其一】 request.setUserName(user.getName()); request.setIdType(1); request.setCurrentUrl(req.getRequestURI());// request.getServletPath() request.setAgent(req.getHeader("User-Agent")); request.setCookie(req.getCookies()[2].getValue()); request.setSessionId(req.getRequestedSessionId()); // request.setMacAddress(""); request.setReferer(req.getHeader("referer")); //request.setActionName("login.do");//LoginPrevention request.setRegisterIp(user.getLastLoginIp()); request.setRegisterDate(1L); request.setAccountExist(1); request.setLoginType(1); request.setPasswordCorrect(1); try { LoginPreventionResponse response = client.getAcsResponse(request); Data data=response.getData();//这里你根据获得的风险报告,可以做一系列的策略,比如封号,封IP,给注册的玩家手机号发消息等 logger.debug("ip={},token={},data={}",request.getIp(),jsToken, ToStringBuilder.reflectionToString(data, ToStringStyle.SHORT_PREFIX_STYLE)); } catch (Exception e) { logger.error(e.getMessage(),e); } } }
按如下校验接入是否成功:
3. 接入成功校验:打开浏览器控制台(F12开发者工具),在页面上移动鼠标、点击键盘:
a. 控制台收到analyze.jsonp请求(多个);
b. 在Headers - Query String Paraments 里看到:n、a、t、asyn、scene等参数;
c. 双击analyze.jsonp请求,获得onJSONPCallback({"result":0,"success":true})。
Query String parameters
n:098#E1hv29vCvv6v9vCkvvv2vjtnRL5Usji8Ph9EHc3Po2MU2cn2R2zZ1jr8RFQx0jgqoFMWHcYWRhMyCcgMRLQXCpGzoLFZzjtnoL6BljiURF6X2cDEPFZxsjyMRhGEgjEvohMpsviRP6qwtjgYnLzp2crEPyzZHpY8oFZEtjYPPFFUAv9MR6GHQjEmLLMZHpGqdphvmpvUsvm6rvC9X9== a:FFFF00000000017A71A3 t:0#FFFF00000000017A71A31518436742848778015284351518510055370901535523100CBE37C32C8041510160E65EA33E434D9A5A50FAD8B45753B1D51261FC2029E32F4DB892CD43AD3E795C914C022F5EDEA9B9402422C77DA090F35ED4 asyn:0 scene:login callback:_uab_jsonp46500
试验,故意不断换IP频繁登录,从数据风控报表页能实时看到一些报告:
目前该系统比较让用户失望的是 风险报告里没提供任何风险提示的内容,这点腾讯云做的就比较到位。
参考:
腾讯相对应的就是天御系统的 登录保护