1、背景网络安全方案,主要从数据加密与api接口安全两个方面考虑,数据加密https已经加密了,就不再次加密了;主要从api安全方面考虑。 2、接口安全设计在代码层面,对接口进行安全设计 一、使用token进行用户身份认证用户身份认证的流程图如下: 具体说明如下: 1、 用户登录时,客户端请求接口,传入用户名和密文的密码 二、使用sign防止传入参数被篡改为了防止中间人攻击(客户端发来的请求被第三方拦截篡改),引入参数的签名机制。 1、客户端和服务端约定一个加密算法(或MD5摘要也可), 客户端发起请求时,将所有的非空参数按升序拼在一起,通过加密算法形成一个sign,将其放在请求头中传递给后端服务。 由于中间人不知道加密方法,也就不能伪造一个有效的sign。从而防止了中间人对请求参数的篡改。 三、用时间戳防止暴力请求sign机制可以防止参数被篡改,但无法防dos攻击(第三方使用正确的参数,不停请求服务器,使之无法正常提供服务)。因此,还需要引入时间戳机制。 sign值来源 = 所有非空参数升序排序+token+timestamp 而后端则需要根据当前时间和sign值的时间戳进行比较,差值超过一段时间则不予放行。 3、项目拟采用的方案(1)获取token这里还是隐藏下了。 (2)接口新增三个字段:token、timestamp、sign{ 'address': '33', 'bussinessType': '22', 'city': '111', 'companyName': 'st232ring', 'token': 'idfajdjjlkczkvhcklgjkfsj<jjkv', 'timestamp': '20210714164139', 'sign':'fdakfljdkfjdks'} (3)签名sign生成规则规则:sha1(keyvalkeyval+token+timestamp+id) 例如:sha1( 这里新增一个id值,与token对应,传输过程中不使用,只用于加密,保证数据即使被截获,因为请求中没有id的传输,更加安全。 (4)几个参数上面已经说过了,简单再说一句。token身份认证; timestamp方式防止dos攻击,防止重放,简单说就是一次接口调用,只能用一定时间,比如比对时间,60s内该次调用有效,60秒后失效; sign签名,通过参数+token+timestamp+id固定位加密,保证参数不会被修改,调用有效; |
|