使用背景:由於一款遊戲經常會被盜號,小號肆虐,會對遊戲的正常運營產生很負面的影響,急需找一款風控產品來解決這個問題。
那麼,這些行爲都有哪些特徵呢?
盜號,基本都是暴力破解,撞庫後異地登錄;工作室操控海量小號,那麼,基本是會用腳本去處理,不會觸碰到頁面(也就是非真人登錄),而且很有可能會共用相同的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頻繁登錄,從數據風控報表頁能實時看到一些報告:
參考:
騰訊相對應的就是天御系統的 登錄保護