其实很多时候,自己人是比较难搞的。比如说密码的问题吧。早期的网站很多时候,账号密码就是明文的(安全意识不强,当然了早期嘛,谁都会犯错)。这个时候运营打开自家数据库。那么所有的账号密码那是一览无余呀。这种时候只能靠运营的节操来保证数据不会被偷了。就算是运营不会自己偷这部分数据。但是你要知道,总有一些黑客能够偷偷溜进服务器,偷了一块数据库。如果你有加密(不可逆加密)的话,就算拿到数据库也是没有什么用的,因为密码那一栏被干掉了。这样保证最起码,账号密码不会同时被盗。话说我的所有账号密码都基本上是一套,一套掉了,基本上全套都得换,这是意见非常恐怖的事情。(因为场景用的多了,难免会有一些你想不到,没有去改的,却给你带来比较严重的后果)
怎么让Token失效 服务器端更换密钥因为密钥更换了,所以所有的加密使用原来公钥加密的数据都会失效。所以可以达到更换Token的目的。不过这样的确定十分明显,因为你是在同一个时间点上换的,所以所有数据都会失效,然后重新拉取凭证。这个时候服务器压力应该会很大。再一个就是没什么用,因为攻击者可以在失败之后直接获取一个新的有效Token就可以了。
客户端服务器数据协同就是让服务器跟客户端数据保持时间上的一致性,一般情况下要求保持分钟数据相同就可以了。这样客户端算出来自己的Token + 时间分钟戳的密文,然后发送给服务器。服务器接收到密文不需要解密(因此这种是使用不可逆加密算法更为靠谱),直接算出三个结果 (Token + 当前时间和Token + 当前前后各一分钟的时间)判定用户上传的数据是否属于这三个之一,如果是属于就通过,不属于就不通过。
客户端的每一个Token都是不一样的客户端(或者Web网页)用自己的Token + 当前的时间戳(假定不会再同一时间上有多个请求,时间戳可以定的单位更小一些或者进行排队)生成一个密文,然后发送给服务器。服务器拿到密文之后解密,获取并验证Token如果Token通过了就看时间戳是不是在上一个时间戳之后。如果不是在上一个时间戳之后,那么就验证失败好了。
后记可能比较乱这个,我也是想到什么地方,就写到什么地方。欢迎在下方评论。
说明MD5其实并不能算作是一种加密算法,因为加密算一半要牵扯到解密。MD5是一种摘要算法,就是从大数据块中摘取特征码的一种算法。文中将他作为一种不可逆的加密算法来看待,当然这是不准确的一种说法,望周知
posted @