今天看到有人写的关于WEB登录验证的内容。
其中谈到安全这一环节,说实话,关于安全,还真的很头痛。
记得很早以前有人使用Cookie保存验证结果。但是Cookie保存在客户端,很容易被获取到,而且也很容易被修改,所以当时Cookie欺骗是很普遍的现象。现在Cookie并不会储存安全性很高的数据,并且数据都会经过加密。
再之后人用Session保存,但是服务器是如何知道客户端使用的是哪个Session呢?其实Session是以SessionID来区分的,而SessionID是保存在浏览器里的,在浏览器关闭时同时被销毁。其实就是一种是不会保存成文件形式的Cookie。既然Cookie,那么就会有办法获取到SessionID,然后的做法和Cookie欺骗是一样的啦。只是这个比Cookie多的就是Session会在服务器端过期,而Cookie不会。
我现在所能想到的安全级别比较高的方法:(仅针对于HTTP,并不适用于HTTPS)
用户在登陆网站时,如果登陆成功,返回新生成公钥,在Session中,放入对应的密钥,并在其中加入一个数值,用来表示在用户成功登陆后,与服务器交互次数。客户端在收到反馈时,保存公钥,并生成一个值,保存与服务器交互次数+1。
在用户登陆后,再次发送请求是,先格式化请求,再其中加入在客户端保存的数值,然后通过公钥加密。服务器再接收到请求时,先对请求解密,然后分析请求格式,然后提取请求中的交互册数,同时把服务器上的互次数+1,两个数同时比对,如果相等,则表示请求正常,处理相应请求。
如果两个数不正确则记录一次,当记录达到某个阀值时或两个值相差达到某个阀值,断开与用户连接,清空Session,要求用户重新登陆。
这样的好处:
那怕有人获取到你的SessionID,和你的公钥,以及你的与服务器交互次数,也会因为两人同时使用交互次数而导致一个人的请求被取消。如果服务器的错误阀值设的很低,比如一次,则很容易达到。因此很容易就断开连接,使得刚刚获取到的信息作废,需要重新获取。这样大大增加安全性。
这样的坏处:
如果阀值设置过大,则不能起到很好的保护作用。
如果一个人获取到你的Session和你的公钥,则可以强制是你断线,重新登陆。
原文链接:https://www.cnblogs.com/comsokey/archive/2011/08/26/Web.html
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/18582