<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          aswan陌陌風控系統(tǒng)靜態(tài)規(guī)則引擎

          聯(lián)合創(chuàng)作 · 2023-09-30 06:35

          aswan 是陌陌開發(fā)的風控系統(tǒng)靜態(tài)規(guī)則引擎,零基礎(chǔ)簡易便捷的配置多種復雜規(guī)則,實時高效管控用戶異常行為。

          架構(gòu)介紹

          風控系統(tǒng)架構(gòu)圖

          快速啟動

          1. 本項目依賴redis, mysql, mongodb,因此需準備環(huán)境并更改配置項
              # 為了簡單可以使用docker安裝
              # docker安裝文檔地址(以ubuntu為例): https://docs.docker.com/install/linux/docker-ce/ubuntu/
              mongo: docker run -d --name mongo -v $HOME/docker_volumes/mongodb:/data/db  -p 27017:27017 mongo:latest
              mysql: docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -v $HOME/docker_volumes/mysql:/var/lib/mysql -v $HOME/docker_volumes/conf/mysql:/etc/mysql/conf.d -p 3306:3306 mysql:5.6
              redis: docker run -d --name redis -p 6379:6379  -v $HOME/docker_volumes/redis:/var/lib/redis redis:latest
          1. 在mysql中創(chuàng)建risk_control庫
              docker exec -it mysql mysql -h 127.0.0.1 -u root -p # 后續(xù)需輸入密碼 若以上述方式安裝mysql,密碼為root.
              CREATE DATABASE risk_control CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 創(chuàng)建數(shù)據(jù)庫時指定編碼格式,規(guī)避亂碼問題(注意: 此編碼格式在mysql低版本上可能有兼容性問題)
          1. 安裝所需依賴,本項目基于python2.7進行開發(fā),可運行pip install -r requirements.txt安裝依賴包
          2. 初始化django運行所需的表并創(chuàng)建賬戶,并可以預生成一些數(shù)據(jù)(可選)
              # 在www目錄下
              python manage.py makemigrations && python manage.py migrate
              # 創(chuàng)建管理員賬戶  此處詳見  其它操作--增加用戶
              python manage.py createsuperuser # 后續(xù) 依次輸入用戶名、密碼、郵箱 即可創(chuàng)建一個管理員賬號
              # 如果希望對系統(tǒng)有一個直觀的感受,可以使用如下指令來預注入一些數(shù)據(jù)
              python manage.py init_risk_data
          1. 啟動服務
              # 在aswan下以nohup的方式啟動服務進程、管理后臺、攔截日志消費進程
              bash start.sh

          后臺介紹

          1. 名單管理

            為名單型策略提供基礎(chǔ)的數(shù)據(jù)管理功能。

            名單數(shù)據(jù)的維度包括:用戶ID、IP、設(shè)備號、支付賬號、手機號。后續(xù)也可以根據(jù)自己的需求擴充其他的維度。

            名單包含三個類型:黑、白、灰名單

            名單必須屬于某個項目(用于確定名單的范圍),可以在名單管理-名單項目管理中添加項目。

            名單管理

          2. 名單型策略

            描述符為**{參數(shù)名:單選,假設(shè)是“用戶ID”} {操作碼:在/不在} {XX項目:單選,可選全局} 的 {維度:單選}{方向:黑/白/灰名單}**

            示例:用戶ID 在 初始項目 的 用戶黑名單 中

            名單型策略

          3. 布爾型策略

            不傳閾值的布爾型,描述符為 {參數(shù)名:單選,假設(shè)是"賬號ID"} {操作碼:是/不是} {內(nèi)置函數(shù):異常用戶} 示例:賬號ID是異常用戶

            傳閾值的布爾型,描述符為 {參數(shù)名:單選,假設(shè)是"賬號ID"} {操作碼:大于/小于/等于/不等于} {內(nèi)置函數(shù):歷史登錄次數(shù)} {閾值:170} 示例:賬號ID歷史登錄次數(shù)大于100

            布爾型策略

            內(nèi)置函數(shù)是什么?就是自定義的一些邏輯判斷函數(shù),只需要滿足要求返回布爾值即可。比如注冊時間是否在某個范圍以內(nèi),當前設(shè)備是否是常用設(shè)備。

          4. 時段頻控型策略

            描述符為 同一 {計數(shù)維度:單選,假設(shè)是“設(shè)備”} 在 {時段:時間跨度} 內(nèi)限制 {閾值:整數(shù)N} 次 某動作 示例:同一設(shè)備一天內(nèi)限制操作10次. 可是我怎么知道當前已經(jīng)有多少次呢?這就需要上報,上報后將計數(shù) 詳見第9條 數(shù)據(jù)源管理

            時段頻控型策略

          5. 限用戶數(shù)型策略

            描述符為 同一 {計數(shù)維度:單選,假設(shè)是“設(shè)備”} 在 {時段:時間跨度} 內(nèi)限制 {閾值:整數(shù)N} 個用戶

            示例:同一設(shè)備當天限10個用戶 此策略同樣需要上報的數(shù)據(jù),且由于與用戶相關(guān),因此上報數(shù)據(jù)中必須包含user_id字段(在數(shù)據(jù)源中需配置) 詳見第9條 數(shù)據(jù)源管理

            限用戶數(shù)型策略

          6. 規(guī)則管理

            管控原子:命中某條策略后的管控動作,比如攔截... 把上面2--5中所述的策略原子按照優(yōu)先級組合起來,由上向下執(zhí)行,直到命中某條策略,則返回對應策略的管控原子。此模塊更多是重交互,完成策略的配置、組合、權(quán)重等等

            規(guī)則配置頁

          7. 日志管理

            所有命中策略的日志均在此展示,也會包含審計相關(guān)的日志,下一期會基于此日志,開放攔截溯源功能

            命中日志

            審計日志

          8. 權(quán)限配置

            供權(quán)限設(shè)置使用,精確限定某個用戶能看哪些頁面的數(shù)據(jù)。 詳見 其它 -- 權(quán)限管理。

          9. 數(shù)據(jù)源配置

            示例策略:同一設(shè)備一天內(nèi)限制登錄1000次 那么每次登陸就需要上報一條數(shù)據(jù),系統(tǒng)會分類計數(shù),并分類存儲。 存儲的名字叫啥?就是此處要配置的數(shù)據(jù)源。對于此策略,只需要配置數(shù)據(jù)源,命名為login_uid, 字段包含uid, uid類型是string。然后程序就能根據(jù)uid為維度計數(shù),并自動計算指定時間窗口內(nèi)是否超出指定閾值。

            重要:由于邏輯必然依賴時間信息,為通用且必需字段,timestamp為默認隱含字段,類型是時間戳(精確到秒,整數(shù))

            數(shù)據(jù)源配置

          調(diào)用樣例

          1. 調(diào)用查詢服務

            假設(shè)存在id為1的規(guī)則,則可以通過如下方式查詢是否命中策略

          curl 127.0.0.1:50000/query/ -X POST -d '{"rule_id": "1", "user_id": "10000"}' -H "Content-Type:application/json"
          
          1. 調(diào)用上報服務

            假設(shè)存在名稱為test的數(shù)據(jù)源, 且數(shù)據(jù)源含有的數(shù)據(jù)是: {"ip": "string", "user_id": "string", "uid": "string"}

          curl 127.0.0.1:50000/report/ -X POST -d '{"source": "test", "user_id": "10000", "ip": "127.0.0.1", "uid": "abcabc112333222", "timestamp": 1559049606}' -H "Content-Type:application/json"
          
          1. 關(guān)于服務拆分

            開源樣例中,為了簡化安裝部署,查詢和上報揉進了一個服務。實際場景中,顯然讀寫應該分離。

            1.可以直接此方式部署2份,域名不同,一份用于查詢(上報接口不被訪問),一份用于上報(查詢接口不被訪問),流量分發(fā)在nginx層完成

            2.risk_server.py中修改配置URL_2_HANDLERS,選擇您需要的服務接口部署

          內(nèi)置函數(shù)的擴展

          1. 不帶閾值的內(nèi)置函數(shù)擴展

            是否異常用戶內(nèi)置函數(shù)為例
            代碼見 aswan/buildin_funcs/sample.py 中的 is_abnormal 方法

          2. 帶閾值的內(nèi)置函數(shù)布爾型策略擴展

            歷史登錄次數(shù)內(nèi)置函數(shù)為例
            代碼見 aswan/buildin_funcs/sample.py 中的 user_login_count 方法
            注意:閾值計算不包含在內(nèi)置函數(shù)中進行,控制流詳見 aswan/buildin_funcs/base.py

          其它

          增加用戶

          考慮到企業(yè)用戶大多數(shù)為域賬戶登錄,因此推薦使用LDAP認證模塊直接集成。但考慮到大家的場景不一樣,因此也可以手動增加用戶,樣例代碼如下:

          # coding=utf-8
          from django.contrib.auth.models import User
          
          username = 'username'
          password = 'password'
          email = '[email protected]'
          first_name = '測'
          last_name = '試'
          # 普通用戶
          User.objects.create_user(username=username, password=password, email=email, first_name=first_name, last_name=last_name)
          # 管理員賬戶
          User.objects.create_superuser(username=username, password=password, email=email, first_name=first_name, last_name=last_name)

          添加完成后,讓用戶登錄,然后管理員配置權(quán)限即可。

          權(quán)限管理

          目前的權(quán)限模型包含如下元素,可在對應的頁面進行配置。

          元素名稱 元素含義 配置方式
          uri 風控管理后臺的一個獨立uri 開發(fā)時自動產(chǎn)生 此處uri為相對路徑,例如: /permissions/groups/
          uri組 多個相互關(guān)聯(lián)的uri可以被放置到一個uri組中 /permissions/uri_groups/ -
          權(quán)限組 多個uri組可以被分配到一個權(quán)限組中 /permissions/groups/ -
          用戶 用戶即為獨立的個人/員工 /permissions/users/ 1. 本系統(tǒng)在界面上不提供添加用戶的功能;2. 用戶可以被分配到某個權(quán)限組中,也可以直接配置uri組
          管理員 即為系統(tǒng)的擁有者,默認擁有所有權(quán)限 手動配置 -

          具體圖示如下:

          uri組管理

          權(quán)限組管理

          用戶管理

          配置相關(guān)

          目前Django部分的配置均存放于 www/settings 目錄,非Django部分的配置均位于 config 目錄下。

          為了在不同環(huán)境加載不同的配置,我們使用了RISK_ENV這個環(huán)境變量,系統(tǒng)在運行時會自動通過這個環(huán)境變量的值加載對應的配置文件。

          為了方便項目啟動,在未設(shè)置這個值時,系統(tǒng)默認會加載 develop 環(huán)境的配置。而在執(zhí)行測試時(python manage.py test)時,RISK_ENV的值必須是 test 。

          瀏覽 12
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  开心激情网站 | 青青青国产在线 | 国产不卡免费视频 | 日韩性爱在线电影网 | 奇米狠狠狠 |