Rumah  >  Soal Jawab  >  teks badan

javascript - web端密码传输前加密是否可以实现

为了防止传输过程被嗅探,是否可能在登录前先进行加密,但考虑到js都是可以看到,加密貌似又没意义。
目前采用https加密传输是简单的方式,那么在web端是否可以实现传输前的加密?

伊谢尔伦伊谢尔伦2773 hari yang lalu602

membalas semua(1)saya akan balas

  • 阿神

    阿神2017-04-10 14:45:02

    恰好对这个话题有些研究,首先,我们来将所谓的「保护」分成几个级别来看:

    一、传输过程中的保护

    即楼主提到的「传输过程中被嗅探」,我认为,解决这个问题的唯一有效途径是使用 https, 其他方式都是在造 https 的轮子,会花费大量的精力,而结果最多也就是和 https 做到一样的效果。

    二、对用户明文密码的保护

    通常我们认为用户的明文密码属于用户的隐私,而通常服务器又不关心用户的密码是什么,只关心这个用户是不是真正的用户,而不是冒充的。因此,有一个方案可以让服务器自始至终都不知道用户的明文密码,即在注册和登录时,在前端对用户输入的密码,通过某种规则进行散列(如 SHA), 将散列后的密码作为真正的密码提交给后端,这样在后端看来,每个用户的明文密码都是一个散列值。一旦数据库泄露,或服务器被植入木马,也无法获知用户的明文密码。

    三、对用户数据的保护

    一部分非社交应用的用户数据,是仅供用户自己访问的,例如一个网盘应用、笔记应用等等。这些数据不需要与其他用户共享,那么从理论上来讲,服务器也就不关心用户的真正数据是什么。所以,可以在前端用用户的密码,以某种规则生成一个对称加密密钥(如 AES), 用这个密钥对用户上传往服务器的所有数据进行加密,对所有从服务器上下载的数据解密。这样即使服务器被植入木马或数据库泄露,攻击者也无法获知用户的任何数据。
    使用这个方案的典型网站是 BlockChain, 但这个方案还有很多问题,例如因为数据都被加密过了,在服务器上无法进行搜索和查询,同时大量数据的情况下,性能也很成问题。

    balas
    0
  • Batalbalas