一、功能描述
由于APP和API的请求特点,在服务器端会看到大量高并发的相似特征请求,如浏览器特征User-Agent一致,客户端操作系统特征一致、请求URL高度相似(同一URL接口,不同URL参数)等,而Web防CC在进行监测时,往往会根据上述特征来进行判断,导致出现部分正常访问被误拦截的情况,另外,CC攻击也有可能会伪造为APP请求,令大家防不胜防。为解决以上问题,知道创宇提供APP专用防CC策略,可通过获取的密钥对消息进行签名,由服务端验证通过后再予以放行。
二、功能配置
配置入口:https://defense.yunaq.com/kdb_manage/manage/
开启APP防CC功能,并将云防御生成的密钥部署到APP中后,APP会使用密钥对请求进行签名。云防御服务器在收到访问受保护URL的请求时,使用同样的密钥对签名进行校验,并对没通过校验的请求进行拦截。
操作步骤:
1.点击【状态】开关,开启该功能(如未设置需防护的URL,该功能暂不生效)。
2.点击右侧【密钥设置】-【修改】进行密钥设置。
3.修改APP程序,将密钥部署到APP中。
4.点击【URL设置】-【新增】配置生效范围,填写格式如/api/test/。
注意事项:
1.对于外部跳转(或重定向)的请求,客户端需要在跳转请求中重新计算鉴权信息,否则会导致跳转请求鉴权失败。
2.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 |
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}) |
APP防CC最佳实践可参考:http://help.yunaq.com/faq/3940/index.html
APP防CC拦截效果说明可参考:http://help.yunaq.com/faq/3948/index.html