84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
主要针对两种情形:
用户将Cookie进行破解
恶意用户劫持Cookie冒充登陆
怎样设置Cookie才能记住用户的登陆状态并相对安全呢?
光阴似箭催人老,日月如移越少年。
1. 用户将Cookie进行破解 对于这种情况,可以考虑的是加密的复杂度,以及校验逻辑的升级。比如,将访问时间、客户端IP这些东西都作为Cookie 加密的一部分,增加破解难度。
2. 恶意用户劫持Cookie冒充登陆 因为Cookie 的加密是结合了客户端的IP 信息的。所以,即使Cookie被用到其他的机器来访问,但是IP 本身也是不匹配的,验证无法通过。 同时,我们还可以考虑在服务端,SESSION 存储该Cookie 的信息,用来跟上传信息进行比对,检验cookie信息是否有被篡改过。
这中间的方法各种各样,只是需要分析我们要考虑到什么地步。
回答Session的朋友们,我猜测题主肯定是希望用户能够保存登录态,以便下次访问的时候自动登录。你们提Session,请问如下问题如何解决?
Session 超时怎么算?
SessionID 也需要存在Cookie中。
关于题主的问题:
加密的问题,AES加密即可,强壮的密钥不会被破解,具体加/解密请看 @eechen 的https://segmentfault.com/q/10...
防止被XSS注入后,得到Cookie。httponly即可,session_id和登录态都需要httponly,javascript无法获取到具备httponly属性的cookie
php的原生 session_id 并非 httponly,所以 laravel 中自己实现了 session 的所有逻辑,并支持database、file、redis等驱动
session
session保存在服务端相对安全。
cookie格式例如user_identity|expires_timestamp 对需要encode的部分进行加密。验证的话再解密验证
user_identity|expires_timestamp
设置httponly,禁止js访问cookie使用HTTPS,防止中间人攻击
用户登录后,生成一个加密字符串的授权令牌token保存到cookie中,下次打开读cookie验证令牌是否有效
这中间的方法各种各样,只是需要分析我们要考虑到什么地步。
回答Session的朋友们,我猜测题主肯定是希望用户能够保存登录态,以便下次访问的时候自动登录。你们提Session,请问如下问题如何解决?
Session 超时怎么算?
SessionID 也需要存在Cookie中。
关于题主的问题:
加密的问题,AES加密即可,强壮的密钥不会被破解,具体加/解密请看 @eechen 的https://segmentfault.com/q/10...
防止被XSS注入后,得到Cookie。
httponly即可,session_id和登录态都需要httponly,javascript无法获取到具备httponly属性的cookie
session
session保存在服务端相对安全。
cookie格式例如
user_identity|expires_timestamp
对需要encode的部分进行加密。验证的话再解密验证
设置httponly,禁止js访问cookie
使用HTTPS,防止中间人攻击
用户登录后,生成一个加密字符串的授权令牌token保存到cookie中,下次打开读cookie验证令牌是否有效