如何使用APP防CC策略?

功能描述

由于APP的访问特点,在服务器端会看到大量高并发的相似特征请求,如浏览器特征User-Agent一致,客户端操作系统特征一致、请求URL高度相似(同一URL接口,不同URL参数)等等,一般的Web防CC进行监测时,往往会根据上述特征将这些请求判断为CC攻击,从而产生误报,影响APP的正常使用,另外,部分CC伪造成为APP请求,也令大家防不胜防。为解决以上问题,APP可通过本功能获取的密钥对消息进行加密,由服务端进行验证通过后才予放行。

功能位置

域名设置-子域名设置-控制面板-抗D保-APP防CC策略

将密钥部署到APP中,并填写需要保护的URL地址,填写格式如/api/test/

 

使用流程   

用户开启APP防CC功能(需配置生效的URL范围),将云安全生成的密钥部署到APP中,当APP通过云安全节点访问受保护URL时,使用密钥对请求进行签名。

服务端在收到访问受保护URL的请求时,使用同样的密钥对签名进行校验,并对没通过校验的请求进行拦截。

 

签名并请求示例(python)

信息 含义 样例
ALGO 签名算法,md5,sha1中的一种,客户端可以选择 md5
AUTH_TOKEN 在云安全系统中设置的TOKEN B20kf4CyqY4k1yK0
EXP_TIME 该请求在此时间后无效,为unix时间戳,比如可以设置为”当前时间+60s”作为过期时间 1487141223
NONCE 随机字符串,建议8-16位字符串 5TKyYRvpDxc
URL 请求的完整url https://www.test.com:8443/api/?id=123

 

demo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import hashlib

 

import requests

 

 

ALGO       = ‘md5’                                    # 签名算法,支持md5和sha1

AUTH_TOKEN = ‘B20kf4CyqY4k1yK0’                       # 开启功能时生成的TOKEN

EXP_TIME   = ‘1487141223’                             # 过期时间,为unix时间戳

NONCE      = ‘5TKyYRvpDxc’                            # 随机字符串,建议8到16位

URL        = ‘https://www.test.com:8443/api/?id= 123′ # 请求的完整url

API_AUTH   = ‘X-JSL-API-AUTH’                         # 请求头中验证信息的头域名

 

 

m = {‘md5’: hashlib.md5, ‘sha1’: hashlib.sha1}[ALGO]()

m.update(‘|’.join([ALGO, AUTH_TOKEN, EXP_TIME, NONCE, URL]))

signature = m.hexdigest()

api_auth = ‘|’.join([ALGO, EXP_TIME, NONCE, signature])

print api_auth  # md5|1487141223|5TKyYRvpDxc|9def22973f00081700f44fce9bfd7d3b

 

 

response = requests.get(URL, headers={API_AUTH: api_auth})