常见的CS架构中,客户端经常需要请求服务端提供的公网接口。由于接口暴露在公网,存在以下几个问题
- 接口就很容易被其他人利用甚至有可能导致被刷接口影响服务可用性。
- 请求被篡改,影响实际请求结果
- 其它问题
为了解决这些问题,最简单的方法是客户端请求服务端的时候加个sig签名,服务端对sig签名做个判断。
通过简单的sig签名能够防住一些被刷接口的可能,同时也能够做下请求校验,可以达到初步的防御效果。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import time
import md5
# 常量定义
SIG = "sig"
SIG_TIME = "sigTime"
SIG_VERSION = "sigVersion"
SIG_FINAL_STRING = "sigFinalString"
SIG_SDK_APP_SECRET = "xxx" # 密钥 客户端服务端提前约定好即可
SIG_SDK_ADD_KEY = "yyy" # 盐 客户端服务端提前约定好即可
def get_signature(path, params, sig_time):
new_path = path.lstrip("/")
new_params = sort_params(params)
return generate_signature(new_path, new_params, sig_time)
def sort_params(params):
values = list()
for k, v in params.items():
if k == S