概率抽奖算法
/// <summary> /// 抽奖 /// </summary> /// <param name="probabilities">每个奖项的概率&
https无疑是首先被提及的,ssl本身的特性就能解决大部分的请求内容加密问题。
但https加密的是请求体,而url中的内容是不会被加密的。而且,又会有旧系统中没有使用https。这个问题该如何解决呢?
关于请求加密的问题,大部分的答案加密是不可能完全保证安全性。需要换一种思维,既然无法保障加密的可靠性,但可以想办法保障“用户操作”和“业务流程”的可靠。
这里需要提一个概念:重放攻击。通俗的来说,第三方截获到用户的请求信息,并且能理解请求的作用,通过修改请求内容,并发送服务器,来完成第三方的非法操作。
如何处理“重放攻击”,保障业务安全?在每次请求中,添加参数timestemp
、nonce
、signature
。
timestemp
为“客户端”发送请求的时间戳,通过判断请求到达服务器的时差是否过长,来过滤非法请求。注意的是,要注意“客户端”与“服务器”时间校准的问题。
nonce
为随机字符串,保证每次请求内容不重复。
signature
为加密(例如MD5)所有请求参数(包括query和body)后得出得值。
当中会有一个由服务器颁发,并且会过期期的Token参与signature
计算,但不会包含在请求参数中。