安全過濾器

安全過濾器主要(yào / yāo)分兩部分内容:

  • 密鑰協商:通信開始前首先通過一(yī / yì /yí)次非對稱加密協商出(chū)對稱加密的(de)密鑰,之(zhī)後每次通信使用協商後的(de)對稱加密的(de)密鑰進行加密。

  • 安全防護:主要(yào / yāo)是(shì)通過對報文進行安全驗證達到(dào)防止SQL注入,跨站攻擊、重放攻擊和(hé / huò)CC攻擊的(de)目的(de)

秘鑰交換場景說(shuō)明:

国際版本:

国際版密鑰交換采用RSA進行密鑰交換操作,正常通信請求采用AES對稱加密對報文進行加解密

session:
  values:
  - id: session1
    type: default
    requestUrlExpress: null
    urlLoginMatcher: '*loginService'
    urlLogoutMatcher: '*logoutService'
    sessionType: default
    validateLoginMatches: ['${resultCode} -> AAAAAA']
    validateLogoutMatches: ['${reply.returnCode.type} -> S']
    #国際版密鑰交換filter
    sessionOperationPreFilter: [sessionCreatePreFilter]
    #国際版AES解密filter
    sessionValidatePostFilters: [sessionValidatePostFilter,cmbcSessionPostDecryptFilter]
    sessionLogoutPreFilters: [sessionLogoutPreFilter]
    refuseResponseCode: 'msa.filter.warn.unlogin'
    refuseResponseMessage: '您的(de)登錄會話超時(shí)或該用戶已經在(zài)别的(de)設備上(shàng)登錄了(le/liǎo),請重新登錄!'
  inbound: true
  sessionServiceType: myDbSessionService
  sort: 4
  datasourceId: sessionDB

国密版本:

国密版密鑰交換采用SM2進行密鑰交換操作,正常通信請求采用SM4對稱加密對報文進行加解密 配置事例

session:
  values:
  - id: session1
    type: default
    requestUrlExpress: null
    urlLoginMatcher: '*loginService'
    urlLogoutMatcher: '*logoutService'
    sessionType: default
    validateLoginMatches: ['${resultCode} -> AAAAAA']
    validateLogoutMatches: ['${reply.returnCode.type} -> S']
    #国密版密鑰交換filter
    sessionOperationPreFilter: [sessionCreateGMPreFilter]
    #国密版AES解密filter
    sessionValidatePostFilters: [sessionValidatePostFilter,cmbcSessionPostGMDecryptFilter]
    sessionLogoutPreFilters: [sessionLogoutPreFilter]
    refuseResponseCode: 'msa.filter.warn.unlogin'
    refuseResponseMessage: '您的(de)登錄會話超時(shí)或該用戶已經在(zài)别的(de)設備上(shàng)登錄了(le/liǎo),請重新登錄!'
  inbound: true
  sessionServiceType: myDbSessionService
  sort: 4
  datasourceId: sessionDB

備注:秘鑰協商過程,是(shì)基于(yú)登錄接口之(zhī)上(shàng)完成的(de)操作,隻有當登錄成功,才會進行秘鑰協商的(de)過程,

登錄接口配置及要(yào / yāo)求:

  • urlLoginMatcher:指定登錄接口,并支持正則表示

  • validateLoginMatches:指定返回結果成功的(de)匹配規則,如上(shàng)配置['${resultCode} -> AAAAAA']:隻有當返回結果當中包含resultCode字段,并且返回結果爲(wéi / wèi)"AAAAAA時(shí)",判定登錄成功,否則,判定登錄失敗

  • refuseResponseMessage:登錄失敗提示信息,當判定登錄失敗時(shí),錯誤提示信息

秘鑰協商過程:當登錄成功之(zhī)後,進行秘鑰協商,此時(shí),對登錄成功之(zhī)後的(de)返回結果當中,同時(shí)需要(yào / yāo)包含指定的(de)字段ckey,即秘鑰協商字段,其爲(wéi / wèi)客戶端登錄接口中請求字段,登錄服務處理登錄成功之(zhī)後,隻需将此字段返回網關即可

安全防護配置說(shuō)明:

#接入渠道(dào)
inbound_channel:
  values:
#2、json渠道(dào)
  - id: jsonInboundChannel
    channelType: inbound
    contentType: json
    available: true
    inMessagePool: {poolMode: SHARE, corePoolSize: 500, maximumPoolSize: 500, keepAliveTime: 60,
      available: true }

    outMessagePool: {poolMode: SHARE, corePoolSize: 500, maximumPoolSize: 500, keepAliveTime: 60,
      available: true }
    values:
    - port: 9000
      id: jsonChannel
      started: true
      type: netty
      protocolType: http
      contentType: json
      # 當啓用安全過濾規則時(shí),如防重放,xss時(shí) 打開ffprePackerFilter和(hé / huò)postParseInboundFilter,配合使用
      prePackerFilters: ffPrePackerFilter
    name: JSONServiceInbound_channel
    started: true
#接出(chū)渠道(dào)
outbound_channel:
  values:
  - channelType: outbound
    available: true
    id: jsonChannel
    values:
    - id: ccc
      protocolType: http
      started: true
      contentType: json
      type: netty
      uri: http://127.0.0.1:8080
    name: aa
    started: true
recognizer:
  values:
  - id: recognizer2
    keyMap: { projectName: '${path(/,?,&)[0]}', protocolName: '${path(/,?,&)[1]}', serviceName: '${path(/,?,&)[2]}', pathService: '${path[2..]}'}
    type: url
#路由
router:
  defaultRouter: jsonChannel
  available: true
  pipeType: direct
  inbound: true
id: mygateway
name: mygateway
started: true
session:
  values:
  - id: session1
    type: default
    requestUrlExpress: null
    urlLoginMatcher: '*loginService'
    urlLogoutMatcher: '*logoutService'
    sessionType: default
    validateLoginMatches: ['${resultCode} -> AAAAAA']
    validateLogoutMatches: ['${reply.returnCode.type} -> S']
    sessionOperationPreFilter: [sessionCreatePreFilter]
    sessionValidatePostFilters: [sessionValidatePostFilter,postParseInboundFilter]
    sessionLogoutPreFilters: [sessionLogoutPreFilter]
    refuseResponseCode: 'msa.filter.warn.unlogin'
    refuseResponseMessage: '您的(de)登錄會話超時(shí)或該用戶已經在(zài)别的(de)設備上(shàng)登錄了(le/liǎo),請重新登錄!'
  inbound: true
  localRecognizers:
  - id: a
    type: url
    keyMap:
      projectName: ${path(/,?,&)[0]}
      serviceName: ${path(/,?,&)[2]}
  sessionServiceType: myDbSessionService
  sort: 4
  datasourceId: sessionDB

跨站防護說(shuō)明

跨站防護實現了(le/liǎo)輸入特殊字符的(de)過濾以(yǐ)及輸出(chū)特殊字符的(de)編碼,不(bù)同交易可以(yǐ)配置不(bù)同的(de)防護規則,框架還針對輸入過濾提供字段白名單,配置好後該字段不(bù)需要(yào / yāo)進行輸入過濾。

SQL注入防護說(shuō)明

防注入過濾濾器通過對傳入報文進行安全驗證達到(dào)防止SQL注入攻擊的(de)目的(de)

重放防護說(shuō)明

會話建立後由服務端生成一(yī / yì /yí)個(gè)帶自增屬性的(de)token串,通過setCookie方式寫回客戶端,每次客戶端請求會随cookie默認上(shàng)送該token串。服務端在(zài)會話期内維護一(yī / yì /yí)份token串與交易ID的(de)映射關系表,收到(dào)客戶端請求後會将上(shàng)送的(de)token串與該交易本地(dì / de)存儲的(de)token串做比較,隻有新收到(dào)的(de)token串大(dà)于(yú)本地(dì / de)存儲的(de)token串時(shí),交易可通過,否則認爲(wéi / wèi)是(shì)重放交易。檢查通過後更新該交易的(de)token串并生成新token寫回客戶端,會話建立後由服務端生成一(yī / yì /yí)個(gè)帶自增屬性的(de)token串,通過setCookie方式寫回客戶端,每次客戶端請求會随cookie默認上(shàng)送該token串。服務端在(zài)會話期内維護一(yī / yì /yí)份token串與交易ID的(de)映射關系表,收到(dào)客戶端請求後會将上(shàng)送的(de)token串與該交易本地(dì / de)存儲的(de)token串做比較,隻有新收到(dào)的(de)token串大(dà)于(yú)本地(dì / de)存儲的(de)token串時(shí),交易可通過,否則認爲(wéi / wèi)是(shì)重放交易。檢查通過後更新該交易的(de)token串并生成新token寫回客戶端

CC攻擊防護說(shuō)明

從Session、IP、手機号和(hé / huò)客戶号等維度,每個(gè)維度又從相鄰兩次請求的(de)時(shí)間間隔和(hé / huò)單位時(shí)間内的(de)請求次數兩個(gè)維度對外界惡意請求進行防護

輸入輸出(chū)防護

主要(yào / yāo)實現了(le/liǎo)對交易的(de)入參出(chū)參的(de)過濾,使得入參出(chū)參的(de)key和(hé / huò)value都符合預定的(de)格式,降低安全風險。同時(shí)對于(yú)敏感信息的(de)輸出(chū),框架提供7中默認的(de)脫敏方式,包括中文姓名、身份證号、固定電話、手機号碼、地(dì / de)址、電子(zǐ)郵箱、銀行卡号等信息脫敏,應用系統可以(yǐ)對脫敏方式做擴展

Copyright © 屯昌單支科技有限公司 2019 all right reserved,powered by Gitbook聯系方式: wanglihang@mskj.com
修訂時(shí)間: 2019-08-02 16:19:33

results matching ""

    No results matching ""