最重要的是要防被抓包,其他的都只能加大被伪造的难度,并不能完全避免被“伪造”。
毕竟,无论是 cookie 或 session,或 token ,客户端都要有一个登录凭证,后端只能认这个凭证,如果凭证都被别人拿走了,那后端也没有什么办法。
当然,你可以通过多个认证方式结合,加大伪造的难度。
比如:
cookie 中的字段意义不要太容易被看懂,多放几个混淆一下,有些是请求的参数,有些是认证身份的;
不只判断 cookie,还要判断客户端是不是同一个,ip是不是同一个;
不只 cookie,localStorge 和 sessionStorage 也放一些认证的字段。
....
另外,说一下几种无效的方法:
不断刷新 cookie 或 session:
这是没有用的,你刷新的时候还不是用旧的换新的,伪造的人手里有旧的,当然就可以获得新的。
当然,可能加大伪造难度。
前端传输的时候用 md5 加密:
后端要认证身份,必然需要能解密的算法,如果是用 md5 这种单向加密,后端根本没有办法认证用户身份。前端使用的加密后的字符串必须是由后端来解密的。
如果采用可解密的算法,但因为前端代码别人是可以看到的,加密的方法自然也可以看到,使用已有的加密算法完全没有意义,要使用一个只有自己才能解密的加密算法是比较难的。
总之,还是那句话:最重要的是要防被抓包。