84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
为了防止传输过程被嗅探,是否可能在登录前先进行加密,但考虑到js都是可以看到,加密貌似又没意义。 目前采用https加密传输是简单的方式,那么在web端是否可以实现传输前的加密?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
恰好对这个话题有些研究,首先,我们来将所谓的「保护」分成几个级别来看:
一、传输过程中的保护
即楼主提到的「传输过程中被嗅探」,我认为,解决这个问题的唯一有效途径是使用 https, 其他方式都是在造 https 的轮子,会花费大量的精力,而结果最多也就是和 https 做到一样的效果。
二、对用户明文密码的保护
通常我们认为用户的明文密码属于用户的隐私,而通常服务器又不关心用户的密码是什么,只关心这个用户是不是真正的用户,而不是冒充的。因此,有一个方案可以让服务器自始至终都不知道用户的明文密码,即在注册和登录时,在前端对用户输入的密码,通过某种规则进行散列(如 SHA), 将散列后的密码作为真正的密码提交给后端,这样在后端看来,每个用户的明文密码都是一个散列值。一旦数据库泄露,或服务器被植入木马,也无法获知用户的明文密码。
三、对用户数据的保护
一部分非社交应用的用户数据,是仅供用户自己访问的,例如一个网盘应用、笔记应用等等。这些数据不需要与其他用户共享,那么从理论上来讲,服务器也就不关心用户的真正数据是什么。所以,可以在前端用用户的密码,以某种规则生成一个对称加密密钥(如 AES), 用这个密钥对用户上传往服务器的所有数据进行加密,对所有从服务器上下载的数据解密。这样即使服务器被植入木马或数据库泄露,攻击者也无法获知用户的任何数据。 使用这个方案的典型网站是 BlockChain, 但这个方案还有很多问题,例如因为数据都被加密过了,在服务器上无法进行搜索和查询,同时大量数据的情况下,性能也很成问题。
恰好对这个话题有些研究,首先,我们来将所谓的「保护」分成几个级别来看:
一、传输过程中的保护
即楼主提到的「传输过程中被嗅探」,我认为,解决这个问题的唯一有效途径是使用 https, 其他方式都是在造 https 的轮子,会花费大量的精力,而结果最多也就是和 https 做到一样的效果。
二、对用户明文密码的保护
通常我们认为用户的明文密码属于用户的隐私,而通常服务器又不关心用户的密码是什么,只关心这个用户是不是真正的用户,而不是冒充的。因此,有一个方案可以让服务器自始至终都不知道用户的明文密码,即在注册和登录时,在前端对用户输入的密码,通过某种规则进行散列(如 SHA), 将散列后的密码作为真正的密码提交给后端,这样在后端看来,每个用户的明文密码都是一个散列值。一旦数据库泄露,或服务器被植入木马,也无法获知用户的明文密码。
三、对用户数据的保护
一部分非社交应用的用户数据,是仅供用户自己访问的,例如一个网盘应用、笔记应用等等。这些数据不需要与其他用户共享,那么从理论上来讲,服务器也就不关心用户的真正数据是什么。所以,可以在前端用用户的密码,以某种规则生成一个对称加密密钥(如 AES), 用这个密钥对用户上传往服务器的所有数据进行加密,对所有从服务器上下载的数据解密。这样即使服务器被植入木马或数据库泄露,攻击者也无法获知用户的任何数据。
使用这个方案的典型网站是 BlockChain, 但这个方案还有很多问题,例如因为数据都被加密过了,在服务器上无法进行搜索和查询,同时大量数据的情况下,性能也很成问题。