功能描述
由于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}) |