November 29, 2017

关于请求加密与验证

https无疑是首先被提及的,ssl本身的特性就能解决大部分的请求内容加密问题。

但https加密的是请求体,而url中的内容是不会被加密的。而且,又会有旧系统中没有使用https。这个问题该如何解决呢?

关于请求加密的问题,大部分的答案加密是不可能完全保证安全性。需要换一种思维,既然无法保障加密的可靠性,但可以想办法保障“用户操作”和“业务流程”的可靠。

这里需要提一个概念:重放攻击。通俗的来说,第三方截获到用户的请求信息,并且能理解请求的作用,通过修改请求内容,并发送服务器,来完成第三方的非法操作。

如何处理“重放攻击”,保障业务安全?在每次请求中,添加参数timestempnoncesignature

timestemp为“客户端”发送请求的时间戳,通过判断请求到达服务器的时差是否过长,来过滤非法请求。注意的是,要注意“客户端”与“服务器”时间校准的问题。

nonce为随机字符串,保证每次请求内容不重复。

signature为加密(例如MD5)所有请求参数(包括query和body)后得出得值。

当中会有一个由服务器颁发,并且会过期期的Token参与signature计算,但不会包含在请求参数中。