互联网安全性有关问题

互联网安全性问题

互联网安全性问题

 

 

       谈到互联网安全,会想起中间人攻击,DNS劫持,代理服务器等,对于这么多的危险,怎么保证我们的系统真的足够安全呢?

 

 

 

一个有效的方法:End to End Encryption(端对端加密)

 

    怎么去理解端对端加密呢?核心有如下两点:

 

  • 客户端和服务端交换期间,数据是加密的
  • 既然加密,就用到加密的key,每个客户端使用到的加密key都应该不一样

 

解决方法:

 

  1. 模拟Https的加密流程,生成一个sessionKey,用于加密交互时的数据
  2. 这种方式经过骇客的评估,确实有效地防止被攻击

 

 

 

 

问题一:End to End Encryption 过程中,需要拿到后端的公匙,可不可以再改进?

 

问题关键:

 

  1. 现在服务端的public key、private key是固定的,放在服务器的一个安全机器上,能不能将其改成可变的?

 

解决思路:

 

  1. 每次用户需要生成sessionKey的时候,先用deviceId作为key,在redis中查查,看有没有对应吖pubic key、private key,如果有就拿出来用,如果没有就重新生成一对。
  2. 因为deviceId每台机器都不一样,所以生成的public key、private key是不一样的。

 

 

 

 

问题二:即使做好了加密,如果被人拦截到请求的所有数据,怕不怕被用来重复提交

 

问题关键:

 

  1. 这种敏感的请求,应该有个超时时间来记录什么时候无效

 

解决思路:

 

  1. 客户端发起请求时,生成一个timeStemp,这是当前时间5分钟后的时间。
  2. 服务端拿到请求后,首先检查timeStemp,看这个时间是否超过当前时间,如果超过就是无效的,如果不超过就是有效的。
  3. 那在这5分钟的时间内,怎么保证不会被重复请求呢?
  4. 使用redis做分布式锁,在第一次请求时,看拿不拿得到redis的一个key,看拿不拿得到。
  5. 如果拿得到,证明已经执行过了,可以直接抛异常。
  6. 如果拿不到,证明还没有执行过,那就执行请求。
  7. key的超时时间是5分钟,5分钟后自动删除,这样就可以补充这5分钟的空隙了。